Laravelをv8にアップデートしたところ、以下のようなエラーが発生。
このエラーの原因と対処法について。
エラーの原因
原因はLaravel8になって、ルーティングの書き方が変更になったこと。
コントローラの指定で、 コントローラ名@アクション名 の記載が使えなくなり、エラーが発生するようになった。
Route::get( '/', 'TopController@index' );
対処法
Laravel8指定の書き方に変更する。
Route::get( '/', [コントローラ名::class, 'アクション名'] );
配列にして、[コントローラ名::class, ‘アクション名’] として指定する必要がある。
::class は現在の空間における、完全なクラス名を文字列として返す処理。
(参考)【PHP】::classとは何か?名前解決や完全修飾名とは何かの意味と使い方も解説
その他の変更点としては、URIの指定の冒頭に「/」を記述することが明記されている。(Laravel7はどっちでもよかった)
//例
Route::get('/user/{id}', [UserController::class, 'show']);
サイトの表示に関わるコアな部分なので、突然の変更はやめてほしい、、
参考
//Laravel7
Route::get('user/{id}', 'UserController@show');
//Laravel8
Route::get('/user/{id}', [UserController::class, 'show']);