Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tuto Symfony - generation du bundle

Class not found exception lors du chargement de la page

    5 juillet 2017 à 21:10:41

    Bonjour,

    je fais actuellement le tuto symfony et j'ai un soucis suite à la génération du bundle.

    J'ai recommencé plusieurs fois, et même installé une VM pour tester dans un autre environnement. (essai sous Ubuntu et Debian)

    Sur mon fixe, j'ai plusieurs fois généré des bundles sans avoir ce soucis. Actuellement je n'y ai pas accès et je sèche!

    Quand je génère le bundle (sous symfony 3.3 ou 2.8) tout se passe bien et j'ai bien mon arborescence créée.

    Quand je charge la page, j'ai :

    (1/1) ClassNotFoundException
    Attempted to load class "PlatformBundle" from namespace "PlatformBundle".
    Did you forget a "use" statement for another namespace?

    in AppKernel.php (line 19) -> soit la ligne new PlatformBundle\PlatformBundle(),


    Quand je tente un cache:clear, il me signifie :

    PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "PlatformBundle" from namespace "PlatformBundle".
    Did you forget a "use" statement for another namespace? in /var/www/html/openclassrooms/app/AppKernel.php:19
    Stack trace:
    #0 /var/www/html/openclassrooms/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php(450): AppKernel->registerBundles()
    #1 /var/www/html/openclassrooms/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php(116): Symfony\Component\HttpKernel\Kernel->initializeBundles()
    #2 /var/www/html/openclassrooms/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php(137): Symfony\Component\HttpKernel\Kernel->boot()
    #3 /var/www/html/openclassrooms/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php(124): Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands()
    #4 /var/www/html/openclassrooms/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(90): Symf in /var/www/html/openclassrooms/app/AppKernel.php on line 19


    Les namespaces sont bien présents dans les fichiers php

    Quand je supprime le bundle, les routes qui le concernent et la ligne dans appKernel.php, je me retrouve bien avec la page de base de symfony.

    J'ai fait diverses recherches, mais je n'ai rien trouvé qui puisse résoudre le problème.


    Merci de votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      5 juillet 2017 à 22:10:19

      Salut !

      Quelle version de Symfony utilises-tu ?

      As-tu tenté un composer dump-autoload ?

      -
      Edité par Ymox 6 juillet 2017 à 11:08:38

      • Partager sur Facebook
      • Partager sur Twitter
        5 juillet 2017 à 22:33:21

        Bonjour,

        Petite correction dans composer.json

        Remplacez :

        "psr-4": {
            "AppBundle\\": "src/AppBundle"
        },

        Par :

        "psr-4": {
            "": "src/"
        },

        Et concluez la modification par un :

        composer dump-autoload

        -
        Edité par Maels1991 5 juillet 2017 à 23:02:03

        • Partager sur Facebook
        • Partager sur Twitter
          6 juillet 2017 à 12:50:23

          Merci,

          Tout fonctionne parfaitement!

          Je ne connaissais pas la commande dump-autoload

          • Partager sur Facebook
          • Partager sur Twitter
            7 juillet 2017 à 11:47:58

            Si jamais, la solution est désormais épinglée en haut du forum.

            Merci à maels1991 alias ErwanMaelGuillou pour l'avoir fournie  :)

            -
            Edité par Ymox 14 septembre 2018 à 16:37:48

            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2017 à 1:11:31

              Super ! Merci pour cette correction totalement introuvable sans votre aide.
              • Partager sur Facebook
              • Partager sur Twitter
                25 octobre 2017 à 14:29:52

                Excusez-moi qui peut me dire ou est-ce qu'on entre la dernière modification "composer etc..." ?
                • Partager sur Facebook
                • Partager sur Twitter
                  31 octobre 2017 à 15:11:55

                  on peux éviter tout ce problème en mentionnant la version 3.3.2 dans la commande php symfony new .... 3.3.2, je l'ai essayé!

                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 janvier 2018 à 0:36:18

                    Bonsoir,

                    Objet : Tuto sur Synfony : chapitre "Utilisons la console pour créer un bundle". Version de Symfony : 3.4.4

                      J'ai un problème quand je lance la commande de création d'un bundle (ou plutôt à la fin de la commande).

                    Quand je lance la commande : 

                    php bin/console generate:bundle

                    Tout ce passe bien jusqu'à la fin du traitement. J'ai bien les questions sur le bundle à créer. Mais à la fin du traitement j'ai le message suivant :

                    "The commande as not able to configure everything automatically.

                    You'll need to make the following change manually.

                    Edit the composer.json file and register the bundle namespace in the autoload section.

                    J'ai donc mis dans mon fichier composer.json dans synfony le code suivant :

                    ...
                    "autoload": {
                            "psr-4": {
                    		"":"src/",
                               "OC\\PlatformBundle\\" : "C:/wamp/www/Symfony/src/OC/PlatformBundle/"
                            },
                    ...

                    Suivi de la commande : 

                    composer dump-autoload

                    Remarque : Normalement le namespace es OC/PlatformBundle mais quand je met ce namespace sous cette forme dans le fichier composer.json il me retourne une erreur lors de l'exécution de la commande ci-dessus.

                    Ensuite quand je clique sur le chemin qui figure dans le cadre information un peu plus bas dans le tuto : 

                    http://localhost/Symfony/web/app_dev.php/

                    L'application me retourne l'erreur suivante : 

                    Unable to find template "OCPlatformBundle:Default:index.html.twig" (looked into: C:\wamp\www\Symfony\app/Resources/views, C:\wamp\www\Symfony\vendor\symfony\symfony\src\Symfony\Bridge\Twig/Reources/views/Form).

                    Je note que les chemins donnés dans le message d'erreur ne sont tout à fait corrects. En fait le chemin du  fichier index.html.twig sur ma machine est le suivant  :

                    C:\wamp\www\Symfony\src\OC\PlatformBundle\Resources\views\Default\.

                    Merci de bien vouloir m'aider car moi je ne sais plus quoi faire...

                    Encore merci pour votre aide.

                    -
                    Edité par chris79 1 février 2018 à 8:43:19

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 février 2018 à 4:52:46

                      J'ai trouvé la solution grâce à Fafa1807 qui a écrit le 8 janvier 2018 à 18:41:30 :


                      Si cela peut aider, l'explication pour utiliser les noms des templates dans les méthodes $this->render() :

                      https://symfony.com/doc/current/templating.html#referencing-templates-in-a-bundle

                      Par contre je viens de tester avec la version symfony 3.4.3, et je confirme qu'en déclarant dans le fichier config.yml :

                      1
                      2
                      3
                      Framework :
                      templating:
                      engines: ['twig']

                      la méthode donnée dans le cours "Mon premier « Hello World ! » avec Symfony" :

                      1
                      2
                      3
                      4
                      5
                      6
                      public function indexAction()
                      {
                      $content = $this->get('templating')->render('OCPlatformBundle:Advert:index.html.twig');
                      return new Response($content);
                      }

                      fonctionne correctement, pas besoin de remplacer "OCPlatformBundle:Advert:index.html.twig" par "@OCPlatform/Advert/index.html.twig"

                      Le problème vient du fait que le cours a été réalisé avec la version symfony 3.3.2 dans laquelle "engines: ['twig']" était déclaré par défaut dans le fichier config.yml (tout comme les versions antérieures), alors que dans la version 3.4.3, il est manquant et on doit le déclarer.

                      -
                      Edité par Fafa1807 8 janvier 2018 à 18:41:30

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 février 2018 à 16:03:35

                        bonjour,

                        Merci pour votre réponse. Mais malheureusement elle fait référence à une partie du cours que je n'ai pas encore atteinte. Mon problème concerne la création d'un bundle (debut du cours)  et le message en fin de création du bundle fait référence à la mise à jour manuelle (ajout du namespace OC/PlatformBundle) dans le fichier composer.json. C'est là que je bloque dans l'écriture de ce namespace et du chemin correspondant dans le fichier composer.json.

                        Remarque : Je viens d'installer la version 3.3.2 de Symfony et tout se passe bien pas de message indiquant qu'il faut mettre à jour manuellement le fichier composer.json avec le namespace du bundle créer. Et quand on clique sur le lien dans la box info (un peu plus bas dans le tuto) le chemin  http://localhost/Symfony/web/app_dev.php/ affiche bien Hello World!C'est donc bien un problème de version de Symfony qui est en cause...

                        -
                        Edité par chris79 3 février 2018 à 16:35:10

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Tuto Symfony - generation du bundle

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown