Klasa docelowa [Api \ UserController] nie istnieje
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
Ponieważ importujesz instrukcję use App\Http\Controllers\Api\UserController
namespace, możesz użyć ::class
notacji 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\Controllers
w 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']);
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