Maison > développement back-end > tutoriel php > Pourquoi Symfony3 lance-t-il une exception ClassNotFoundException après avoir généré un bundle ?

Pourquoi Symfony3 lance-t-il une exception ClassNotFoundException après avoir généré un bundle ?

Mary-Kate Olsen
Libérer: 2024-11-22 09:31:11
original
1023 Les gens l'ont consulté

Why Does Symfony3 Throw a ClassNotFoundException After Generating a Bundle?

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 :

  1. Un nouveau projet Symfony a été lancé avec symfony new ArtProject.
  2. Un nouveau bundle a été généré à l'aide de php app/console generate:bundle Paul/ArtBundle, yml , src/.

À 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(),
    ];
}
Copier après la connexion

et le PaulArtBundle a été défini comme :

<?php

namespace Paul\ArtBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class PaulArtBundle extends Bundle
{
}
Copier après la connexion

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" ]
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal