【Laravel】Target class [Controller名] does not exist.のエラーが出た場合の対処法

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宣言の方が分かりやすい。

 

 

コメント