Symfony3 ClassNotFoundException dévoilée
Un utilisateur a rencontré la redoutable ClassNotFoundException alors qu'il se lançait dans un nouveau projet Symfony3 après avoir créé un bundle. Plonger dans les détails :
À leur grand désarroi, en tentant d'accéder 127.0.0.1:8000 a entraîné le fameux message d'erreur : "ClassNotFoundException : tentative de chargement de la classe "PaulArtBundle" à partir de l'espace de noms "PaulArtBundle".
Dévoilement de la cause
Le L'utilisateur a soigneusement examiné le code et a remarqué que AppKernel.php contenait ce qui suit déclaration :
public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), ...... new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Paul\ArtBundle\PaulArtBundle(), ]; }
et le PaulArtBundle a été défini comme :
<?php namespace Paul\ArtBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class PaulArtBundle extends Bundle { }
Le chaînon manquant découvert
Après beaucoup de réflexion, il a été découvert que la commande generate:bundle n'a pas réussi à mettre à jour la section autoload de composer.json, négligeant d'ajouter le nouveau espace de noms.
La résolution
Pour corriger le problème, l'utilisateur a modifié manuellement composer.json et mis à jour la section de chargement automatique :
# composer.json "autoload": { "psr-4": { "AppBundle\": "src/AppBundle", "Paul\": "src/Paul" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }
Exécution composer dumpautoload et le redémarrage du serveur ont résolu l'exception ClassNotFoundException.
Supplémentaire Remarque
L'utilisateur a observé que le nouveau bundle remplaçait la route par défaut (/), d'où le message d'accueil inattendu « Hello World ».
Un aperçu intéressant
Avant Symfony 3.2, la configuration composer.json supposait un mappage PSR-4 sans espace de noms. Cependant, Symfony 3.2 a introduit une approche plus explicite, spécifiant explicitement les espaces de noms. Ce changement a peut-être contribué à ce problème.
Conclusion
Bien que la commande generate:bundle ait toujours été un moyen simple de créer des bundles, les changements récents dans la configuration de chargement automatique de Symfony nécessitent une intervention manuelle pour garantir une intégration transparente du bundle.
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!