Target class Controller does not exist:Laravelのルート設定エラー対策

Laravelバージョンアップ・ニュース

Laravelで次のようなエラーが表示された時の対策をご紹介します。

Target class [PostController] does not exist.

まず、ルート設定を記述してあるファイルroutes/web.phpを開いてみてください。

そこに、次のような形でルートをいれていませんか?

Laravel8以上では、この書き方をしているとエラーになります。エラーを解決するための対策を3点解説しますね。

Junko
Junko

ご利用の環境にあわせて、ルート設定を変更してください。

エラー対策① RouteServiceProviderにコードを加える

一つ目の対策は、Providers/RouteServiceProviderファイルにコードを加える方法です。

Laravel8とLaravel9では、処理がやや異なります。

まずLaravel8について解説します。

Laravel8の場合

Providers/RouteServiceaProvider.phpファイルを開きます。

29行目あたりに、次のようなコードが入っています。

この部分のコメントアウトを解除し、コードを有効にしておきましょう。

ちなみに この部分、Laravel7まではデフォルトで有効になっていました。Laravel8からは、デフォルトでは、上記のようにコメントアウトされています。

Laravel9の場合

Laravel9の場合には、上記のLaravel8の設定に加え、38行目あたりに下記コードを加えておきましょう。

これによって、 protected $namespace = 'App\\Http\\Controllers'; の設定を web.phpのルート設定で有効にできます。

Laravel8ではこの部分はデフォルトでついていました。ですが、Laravel9では、削除されています。そのため手動で追加が必要です。

エラー対策② ルート設定にコントローラーの場所を記載する

二つ目の方法です。

routes/web.phpファイルの中のルート設定に、コントローラーの場所を入れてください。

たとえば、下記のようにルート設定を入れているとします。

【変更前】

 Route::get(‘post’, ‘PostController@index’)->name(‘post.index’);
その場合、次のように変更してください。
【変更後(緑色の部分が追加箇所)】
Route::get(‘post’, ‘App\Http\Controllers\PostController@index’)->name(‘post.index’);

エラー対策③ 公式サイトにある方法でルート設定を記載する

三つ目の方法は、最新のルート設定の書き方に変更することです。

たとえば、下記のようにルート設定を入れているとします。

【変更前】

 Route::get(‘post’, ‘PostController@index’)->name(‘post.index’);
その場合、次のように変更してください。ファイル上部にuse宣言もいれておきます。
【変更後】

use App\Http\Controllers\PostController;

//(省略)

Route::get(‘post’, [PostController::class, ‘index’])->name(‘post.index’);

ルート設定の書き方は、公式マニュアルも参考になります。

さいごに

Laravelのルート設定方法は、バージョンアップした際に変わっています。

従来の書き方をする場合は、設定を変更しないとエラーになります。今回ご紹介したとおり、Laravel8とLaravel9で設定方法が変わっていたりするので、ご注意を!

 

なお、わたしのほうでは「Laravelの教科書」という学習サイトを運営しています。

「Laravelの教科書」には、Laravel8版とLaravel9版の2つのバージョンのテキストをご用意しています。

Laravel8版では、今回ご紹介した形でRouteServiceProviderファイルの設定を変えてルート設定を記述する方法を採用しています。Laravel9版は、Laravel9公式マニュアルに沿った形のルート設定を採用しています。

「ルート設定も含めて、Laravelのコードの書き方をいちから学びたい」

と思ったら、下記ボタンをクリックして詳細を見てみてくださいね。

Junko
Junko

基礎編部分は無料です。

Laravelの教科書について詳しく知る

 

コメント

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