Correction de l'erreur « Le contrôleur de classe cible n'existe pas » dans Laravel 8
Lors de l'utilisation de Laravel 8, vous pouvez rencontrer l'erreur suivante : " La classe cible [ApiRegisterController] n'existe pas." Cela se produit en raison d'un changement dans la façon dont Laravel gère les préfixes d'espace de noms dans les groupes de routes.
Dans Laravel 8, la propriété $namespace dans RouteServiceProvider, qui ajoutait auparavant un préfixe aux définitions de routes du contrôleur, est désormais définie sur null par défaut. Cela signifie que le nom de classe complet doit être utilisé pour faire référence aux contrôleurs dans les routes.
Pour résoudre ce problème, vous disposez de plusieurs options :
Utiliser le nom de classe complet :
Utilisez le nom de classe complet de votre contrôleur dans votre itinéraire. Par exemple :
Route::get('register', 'App\Http\Controllers\Api\RegisterController@register');
Définition du préfixe d'espace de noms dans les groupes de routes :
Si vous préférez l'ancienne méthode, vous pouvez définir un préfixe d'espace de noms pour vos groupes de routes dans RouteServiceProvider. Voici comment procéder :
public function boot() { ... Route::prefix('api') ->middleware('api') ->namespace('App\Http\Controllers') ->group(base_path('routes/api.php')); ... }
Définition de la propriété $namespace :
Bien que la suppression des commentaires de la propriété $namespace dans RouteServiceProvider soit mentionnée dans certaines sources, cela n'affecte que la génération d'URL pour actions et n'ajoute pas lui-même le préfixe d'espace de noms aux routes.
Mise à jour pour Laravel 8.0.2 et versions ultérieures :
Si vous avez installé une nouvelle copie de Laravel 8 depuis la version 8.0.2, vous pouvez décommenter la variable membre protégée $namespace dans RouteServiceProvider pour revenir à l'ancien comportement.
N'oubliez pas que la clé est de définir un préfixe d'espace de noms pour vos groupes de routes, et selon vos préférences, vous pouvez choisir l'une des méthodes mentionnées ci-dessus pour corriger le problème. Erreur "Le contrôleur de classe cible n'existe pas" dans Laravel 8.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!