Целевой класс [Api \ UserController] не существует

Nov 24 2020

Я получаю эту ошибку в Laravel 8 после использования маршрута php artisan: list:

Illuminate \ Contracts \ Container \ BindingResolutionException Целевой класс [Api \ UserController] не существует.

У меня есть контроллер в App \ Http \ Controllers \ Api:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all(); return responde()->json($users);
    }
}

маршруты / api.php:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('users', 'Api\\UserController@index');

Я новичок в Laravel

Ответы

3 Donkarnash Nov 24 2020 at 06:45

Поскольку вы импортируете use App\Http\Controllers\Api\UserControllerоператор пространства имен, вы можете использовать ::classобозначение для класса контроллера. Это также будет иметь дополнительные преимущества, поскольку IDE сможет перемещаться по пути, в отличие от строки

Начиная с Laravel 8, я предполагаю, что пространство имен по умолчанию больше не определено App\Http\Controllersкак находящееся в RouteServiceProvider, скорее разработчику остается определить пространство имен по умолчанию, установив для свойства $ namespace желаемое значение.

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('users', [UserController::class, 'index']);
MuditGulgulia Nov 24 2020 at 12:33

На Larvel 8 вы не можете составить маршрут, как мы использовали раньше, следующий синтаксис:

Контроллер:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
user App\Models\User;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all(); return responde()->json($users);
    }
}

api.php:

<?php

use Illuminate\Support\Facades\Route;

Route::get('users', '\App\Http\Controllers\Api\UserController@index');

Или же

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('/Pages', [UserController::class, 'index']);

Документы для маршрутизации