こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、10年目エンジニアです。
この記事では、Laravelを実行したときに
Target class [○○Controller] does not exist.
というエラーメッセージが表示されたときの
- エラーの原因
- エラーの解決策
と、この記事で丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Laravelのバージョン | 8.10.0 |
「Target class [○○Controller] does not exist.」というエラーメッセージが表示される原因
\routes\web.phpでルーティングで以下のように記載していませんでしょうか?
1 2 3 4 5 |
<?php use Illuminate\Support\Facades\Route; Route::get('/sample', 'SampleController@showPage'); |
このルートの書き方が原因なんです。
Laravelのバージョン7までだったら、この書き方はOKでした。
しかし、バージョン8になってこの書き方はNGになりました。
バージョン8用のルーティングの書き方に修正すれば、解決できます!
エラーの解決策
エラーの解決策として
- 完全修飾名でコントローラーを指定
- useでコントローラーをインポートする
の2パターンあります。
それぞれ解説します。
解決策1:完全修飾名でコントローラーを指定
解決策1として、完全修飾名でコントローラーを指定する方法があります。
一例として、↓のように書きます。
1 2 3 4 5 |
<?php use Illuminate\Support\Facades\Route; Route::get('/sample', 'App\Http\Controllers\SampleController@showPage'); |
上記のようにコントローラーを指定するとき、APPから書く、つまり完全修飾名でコントローラーを指定してあげればOKです。
解決策2:useでコントローラーをインポートする
解決策2として、useでコントローラーをインポートするという方法があります。
ルーティングを設定したいコントローラーをインポートして、コントローラークラスとメソッドを指定します。
一例として、↓のように書きます。
1 2 3 4 5 6 |
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\SampleController; Route::get('/sample', [SampleController::class, 'showPage']); |
上記の例のように、指定したいコントローラーをuseでインポートしてあげればOKです。
注意点としてルーティングで指定する引数で第一引数はバージョン8になっても変わりませんが、第二引数のみ違います。
意味としては以下になります。
まとめ:エラーメッセージ「Target class [○○Controller] does not exist.」が表示されたときはルーティングの書き方を確認しよう!
以上がエラーメッセージ「Target class [○○Controller] does not exist.」の解説でした。
Laravelのバージョンが8で、このエラーメッセージが表示されたときは、ルーティングの書き方を確認してみてください!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント
めちゃくちゃわかりやすくてすごく助かりました!ありがとうございます!
るるるんさんへ
コメントありがとうございます。
そう言って頂けて、とても嬉しいです!
めっちゃ助かりました。8から変わったんですね☆ありがとうございます。
たらしさんへ
コメントありがとうございます。
この記事がお役に立ったようで、嬉しいです!