Klasa docelowa [Api \ UserController] nie istnieje

Nov 24 2020

Otrzymuję ten błąd w Laravel 8 po użyciu php artisan route: list:

Illuminate \ Contracts \ Container \ BindingResolutionException Klasa docelowa [Api \ UserController] nie istnieje.

Mam kontroler w 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');

Jestem nowy w Laravel

Odpowiedzi

3 Donkarnash Nov 24 2020 at 06:45

Ponieważ importujesz instrukcję use App\Http\Controllers\Api\UserControllernamespace, możesz użyć ::classnotacji dla klasy kontrolera. Przyniesie to również dodatkowe korzyści, ponieważ IDE będzie w stanie nawigować do ścieżki w przeciwieństwie do ciągu znaków

Od Laravel 8, domyślam się, że domyślna przestrzeń nazw nie jest już zdefiniowana jako znajdująca się App\Http\Controllersw RouteServiceProvider, raczej pozostawiono programiście zdefiniowanie domyślnej przestrzeni nazw przez ustawienie właściwości $ namespace z żądaną wartością.

<?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

Na Larvel 8 nie można zawrócić trasy, jak to robiliśmy wcześniej, następna składnia jest następująca

Kontroler:

<?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');

Lub

<?php

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

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

Dokumenty do routingu