대상 클래스 [Api \ UserController]가 없습니다.

Nov 24 2020

php artisan route : list를 사용한 후 Laravel 8에서이 오류가 발생합니다.

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);
    }
}

route / api.php :

<?php

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

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

라 라벨의 새로운 임

답변

3 Donkarnash Nov 24 2020 at 06:45

use App\Http\Controllers\Api\UserController네임 스페이스 문을 가져 ::class오므로 컨트롤러 클래스에 대한 표기법을 사용할 수 있습니다 . IDE가 문자열과 달리 경로를 탐색 할 수 있기 때문에 추가 이점이 있습니다.

Laravel 8 이후로 기본 네임 스페이스가 더 이상 App\Http\ControllersRouteServiceProvider 에 있도록 정의되지 않은 것 같습니다. 대신 원하는 값으로 $ 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']);

라우팅 용 문서