Target class [Controller名] does not exist.のエラーが出た場合の対処法
Laravelで開発中に
Target class [〇〇Controller] does not exist.
というエラーが出てしまいましたので対処法を記録します。
原因
エラーは以下のように訳すことができます。
”対象のクラス(〇〇クラス)は存在していません。”
しかし、確認してみると対象となるクラスはきちんと存在しています。なのでルートの書き方に原因がありました。
\routes\web.php
<?php
Route::get('/list', [TodoListController::class, 'index']); //ここの書き方が間違っている。
実はこれはLaravelのバージョン7までサポートされていた記法でバージョン8からは別の記法に変更されています。したがってバージョン8からは、この記法は使うことができません。
解決方法
バージョン8からは以下のようにするといいです。
- use宣言で〇〇コントローラのパスを指定する
- ルーティングでパスを指定する
実際に書いてみます。
use宣言で〇〇コントローラのパスを指定する
\routes\web.php
<?php
use App\Http\Controllers\TodoListController; //use宣言してパスを指定している
Route::get('/list', [TodoListController::class, 'index']);
ルーティングでパスを指定する
\routes\web.php
<?php
Route::get('/list', [App\Http\Controllers\TodoListController::class, 'index']);//パスを指定
まとめ
バージョンにより書き方が違うので、どのように書くかを把握しておく。
自分できにはuse宣言の方が分かりやすい。
コメント