Laravel 8 получает ошибку BindingResolutionException после обновления

#php #laravel #laravel-8

#php #laravel #laravel-8

Вопрос:

После обновления Laravel v:7 до 8 я получаю ошибку ниже, и я не могу ее разрешить

 IlluminateContractsContainerBindingResolutionException
Target class [FrontendHomeController] does not exist. 
  

мой контроллер namespace и структура каталогов:

 |- app
    |- Http
        |- Controllers
            |- Frontend
                 -HomeController.php
             - Controller.php
  

Маршрут:

 Route::namespace('Frontend')->group(function () {
    Route::get('/', 'HomeController@index')->name('home');
});

  

и затем HomeController.php

 <?php

namespace AppHttpControllersFrontend;

use AppHttpControllersController;
use IlluminateHttpRequest;

class HomeController extends Controller
{
    public function index()
    {
        dd('aaaa');
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        //
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }
}

  

использование приведенной ниже команды также не смогло решить мою проблему:

 php artisan clear-compiled
php artisan optimize:clear
composer dump-autoload
  

Ответ №1:

В laravel 8 вам нужно сделать это следующим образом:

 use AppHttpControllersFrontendHomeController;

Route::get('/', [HomeController::class, 'index'])->name('home');
  

В версии V8 Laravel не будет выполнять автоматическое добавление префикса в пространство имен.

Комментарии:

1. Автоматическое добавление префикса в пространство имен все еще теоретически возможно, но оно активно не рекомендуется и больше не входит в стандартные шаблоны по умолчанию.

2. Для Laravel 8.x есть документы: laravel.com/docs/8.x/controllers#basic-controllers