bookmark_borderクラス名間違っていないのに Target class [○○] does not exist. になる- Laravel8

TL;DR

該当のControllerをuseし、::classでそのクラスの完全修飾名を取得。それをControllerとして指定する。

use App\Http\Controllers\HogeController;
Route::get('/hoge', [HogeController::class, 'hogeAction']);

起こるエラー

Illuminate\Contracts\Container\BindingResolutionExceptionTarget class [コントローラーの名前] does not exist.

問題のコードと前提

HogeController.phpはapp/Http/Controllersに間違いなく配置されている。Route::getで指定しているクラス名もtypoしていない。

Route::get('/hoge', 'HogeController@hogeAction');

対処

Laravel8系において、Controllerはクラスの完全修飾名で指定する。

use App\Http\Controllers\HogeController;
// HogeController::class の実行結果は
// 'App\Http\Controllers\HogeController'
Route::get('/hoge', [HogeController::class, 'hogeAction']);

以下でも同じ動作をしますが、Controllerのクラス名::classを使用する上記の方法の方が可読性が良さそうです。(公式ドキュメントのサンプルコードもControllerのクラス名::classの形)

Route::get('/hoge', 'App\Http\Controllers\HogeController@hogeAction');

参考

Laravel 8.x 公式ドキュメント Routing#The Default Route Files

https://laravel.com/docs/8.x/routing#the-default-route-files