Laravel 8でルーティングが変わった件

Laravelでは、アクションに対して、ルートを割り当てる必要があります。

そのことをルーティングといいます。

本記事では、Laravel8で、そのルーティングが変わったという内容を紹介します。

Target class [〇〇Controller] does not exist.

Laravel8で、ルートを設定しようとすると…

Target class [@@Controller] does not exist.

よくあるスペルミスかと思い、web.phpとcontroller.phpを確認するもおかしな箇所は見つかりませんでした。

調べたところバージョン8からルーティング方法が変わっていたことが判明しました。

ルーティング方法

バージョン7以前では、以下のようにルートを設定していました。

例では、/helloにアクセスすると、HelloControllerのindexメソッドを実行するルートを設定しています。

Route::get('/hello','HelloController@index');

バージョン8では、以下のようにルートを設定します。

use App\Http\Controllers\HelloController;

Route::get('/hello', [HelloController::class, 'index']);

記述する量が増えてしまいました…

また、シングルアクションコントローラでは以下のように記述します。

バージョン7以前

Route::get('/hello','HelloController');

バージョン8

use App\Http\Controllers\HelloController;

Route::get('/hello', HelloController::class);

ということでした。

いかにドキュメントを見ることが大事かよくわかりました。

参考資料

https://readouble.com/laravel/8.x/ja/routing.html

https://qiita.com/norichintnk/items/34a04cd17bfe4014313a