La classe cible [Api \ UserController] n'existe pas
Je reçois cette erreur dans Laravel 8 après avoir utilisé php artisan route: list:
Illuminate \ Contracts \ Container \ BindingResolutionException La classe cible [Api \ UserController] n'existe pas.
J'ai un contrôleur dans 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);
}
}
routes / api.php:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('users', 'Api\\UserController@index');
Je suis nouveau chez Laravel
Réponses
Puisque vous importez l' use App\Http\Controllers\Api\UserController
instruction d'espace de noms, vous pouvez utiliser la ::class
notation pour la classe de contrôleur. Cela aura également des avantages supplémentaires car l'EDI pourra naviguer vers le chemin contrairement à la chaîne
Depuis Laravel 8, je suppose que l'espace de noms par défaut n'est plus défini comme étant App\Http\Controllers
dans RouteServiceProvider, il appartient plutôt au développeur de définir l'espace de noms par défaut en définissant la propriété $ namespace avec la valeur souhaitée.
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('users', [UserController::class, 'index']);
Sur Larvel 8, vous ne pouvez pas gérer l'itinéraire comme nous le faisions auparavant, la syntaxe suivante est la suivante
Manette:
<?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');
Ou alors
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('/Pages', [UserController::class, 'index']);
Documents pour le routage