【Q&A】画面遷移の上手くいく・いかない【Laravel】

こんにちは、@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のルートについて解説しました。