こんにちは、@codeship_techです。
本日の質問がこちら。
ブログ投稿サイトのようなものを作っています。
詳細ページは無事に実装でき、データベースから取得したデータを表示できるようになりました。
記事が投稿できるように投稿フォームを作成しましたが、投稿フォームが表示されるべきURLに訪れても、フォームが表示されず、なぜか詳細ページが表示されます。
ルートはこのように書きました。
Route::get('hello/{id}', 'HomeController@show');
Route::get('hello/new', 'HomeController@new');
何がいけないのでしょうか?
ということで、Laravelのルートについての質問ですね。
それではこちらの質問に答えていきます。
このコードだと、HomeControllerのnewメソッドではなく、showメソッドが実行されているために詳細ページに飛ばされています。
これは、hello/new
というURLに訪れた時に、 new
という文字が new
というid
として処理されているためです。
したがって、以下のように->where('id', '[0-9]+')
をつけることで、idは整数値しか取らないことを明示してあげると解決します。
Route::get('hello/{id}', 'HomeController@show')->where('id', '[0-9]+');
Route::get('hello/new', 'HomeController@new');
他にも、RouteServiceProvider.php
に加筆することでも同様のことができます。
本日は、Laravelのルートについて解説しました。