【Laravel8】対処法:Target class [XxxController] does not exist. Illuminate\Contracts\Container\BindingResolutionException

error-porblem-detected-dialogue Laravel
記事内に広告が含まれていることがあります。

Laravelをv8にアップデートしたところ、以下のようなエラーが発生。

エラー内容

Illuminate\Contracts\Container\BindingResolutionException


Target class [XxxController] does not exist.

このエラーの原因と対処法について。

エラーの原因

原因は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']);

タイトルとURLをコピーしました