![スクリーンショット 2020-03-27 13.29.23.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F394234%2F9d0cf32e-6ec7-2454-ef68-90b9a81cd0f8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e92aa14625955fedf3c4298feae8c3aa)
TypeError
Argument 1 passed to App\Http\Controllers\GroupController::index() must be of the type int, string given
このエラーについて、同じエラーで困ってる方がいたら確認して欲しいポイントをお伝えしていきたいと思います。
#web.phpのルーティング順序を疑ってみよう
前者がエラーが出ていた時のルーティングで、後者がエラーが消えた時のルーティングです。
書き順が違います。
本来は/groups/new
を呼び出したいアクションでもnew
を{id}
だと勘違いして、/groups/{id}
を呼んでしまっていたようです。laravelは仕様で上に書いてある設定を先に読み込んでしまいます。
もっとスマートな解放がlaravalには用意されていると思うのですが、今回は簡単に順序を入れ替えてエラー対処しました。
web.php
//前者
//グループ一覧表示
Route::get('/groups/{id}', 'GroupController@index')->name('groups.index');
//グループを新規作成ページを表示
Route::get('/groups/new', 'GroupController@new')->name('group.new');
//グループを新規作成
Route::post('/groups/new', 'GroupController@store');
web.php
//後者
//グループを新規作成ページを表示
Route::get('/groups/new', 'GroupController@new')->name('group.new');
//グループを新規作成
Route::post('/groups/new', 'GroupController@store');
//グループ一覧表示
Route::get('/groups/{id}', 'GroupController@index')->name('groups.index');
///groups/{id}のルーティングを一番下に移動