【Laravel8】注意!コントローラは従来の書き方で呼び出せません。Target class [Controller] does not exist.

こんにちは。Laravel8からコントローラの呼び出し方の仕様に変更があり、従来どおりの方法で呼び出せなくなりました。ルーティングからコントローラを呼び出すときは以下のような形式で呼び出していました。

Route::get('/sample', 'SampleController@index');

Laravel8で実行するとTarget class [SampleController] does not exist.のエラーが出てしまいます。

このエラーに対処するための方法が2点ありますので紹介します。

解決策① コントローラの名前空間を記述する

名前空間まで記述するとエラーを解消できます。

Route::get('/sample', 'App\Http\Controllers\SampleController@index');

解決策② Controller::classの形式で記述する

Controller::classの形式で記述するという方法もあります。対象のコントローラをルーターでuseする必要がありますので注意が必要です。

use App\Http\Controllers\SampleController;

Route::get('/sample', [SampleController::class, 'index']);

まとめ

旧バージョンで慣れている開発者が初めてバージョン8を触るときに必ずハマると思ったので、メモ的な感じで記事を作りました。メジャーバージョンアップのときに下位互換は保証されないので、注意が必要ですね。

また、既存のアプリケーションのバージョンアップする際にも修正対応しなくてはいけない項目の一つです。

Laravel公式のアップグレードガイドにも記述がありますので参照ください。https://readouble.com/laravel/8.x/ja/upgrade.html

Laravel

Posted by kobainmac