Laravel5のルーティングでRoute::resourceにて書いた場合、
ルーティングとしては/hoge/{hoge}/edit のようなものが作られるかと思います。
この{hoge}にあたる部分を{id}にすることは可能でしょうか?
より具体的には、{hoge}にあたる部分への例外処理を実施する方法が知りたく、質問させて頂きました。
というのも、{hoge}の部分に1などの整数値が入っていればpsql文としては
select * from "hoge" where "hoge"."id" = 1 limit 1
のようなものが入るため、期待通りのページを出してくれますが、
ここにaaなどの文字列が入ってきた場合psql文としては
select * from "hoge" where "hoge"."id" = aa limit 1
が入ってくるため、idを正しく取得できず、psqlエラーが表示されます。
そこで、/hoge/1/editのようにURLに直打ちしたとして、
その1という値がデータベース上のidカラムに存在する場合はViewを返し、
存在しない場合は全てabort 404などするといったことをしたいのですが、
これはroute.phpに書くべき内容なのでしょうか?
また、書く場合にどのような条件分岐を書くと期待動作をするのかを教えて頂けますと幸いです。
どうぞよろしくお願いいたします。
追記
以下のようにすることで、期待動作をすることが可能だということがわかりました。
Route::get('/hoge/{hoge}/edit','TestsController@edit')->name('hoge.edit')->where('hoge','[0-9]+');
ということは、storeやupdateメソッドなどもこれで全部where文を書いていけば一旦問題は解決な訳ですが、これを次のようにResourceで使いたいです。
Route::resource('/hoge', 'TestsController')->where('hoge','[0-9]+');
しかし、これだとCall to a member function where() on nullと表示され、期待動作をしません。
おそらくindexにはidにあたる数値が入ってこないためこのエラーが発生しているものと思われます。
そこで、resourceを使うけどwhere文はindexのみを除外する、といった記述は可能でしょうか?
やっぱりgetやpostをいちいち全部書かないとダメでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。