Target class Controller does not exist

Август, 2022

Данная ошибка актуальна для тех кто изучает Laravel по старым курсам, либо крайне невнимательно обновил фреймворк. Начиная с 8-ой версии был изменён синтаксис роутов по умолчанию.

Target class [PostController] does not exist

Раньше использовался «string syntax»:

1Route::get('posts', 'PostController@index');
highlight by torchlight.dev

С 8-ой версии используется «callable syntax»:

1use App\Http\Controllers\PostController;
2 
3Route::get('posts', [PostController::class, 'index']);
highlight by torchlight.dev

Важно: Не забудь указать use

Оба варианта рабочие, но в новых версиях был удалён корневой namespace App\Http\Controllers, а значит теперь необходимо указывать полный namespace. Более подробно можно почитать в Upgrade Guide

Это опциональное изменение для улучшенной поддержки IDE, можно продолжать использовать старый вариант указав полный namespace к классу или указав корневой $namespace в App\Providers\RouteServiceProvider, как было в предыдущих версиях, но в этом нет никаких преимуществ и лучше перейти к новому варианту.