Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony] Could not resolve argument $name

    15 septembre 2021 à 18:40:47

    Bonjour, je cherche à afficher des données de ma base de donnée dans mon template. Pour ça j'ai crée une fonction qui est celle ci :

        /**
         * @Route("/designation/{slug}", name="designation")
         */
        public function show($slug, $name): Response
        {
            $designation = $this->entityManager->getRepository(Designation::class)->findOneBy(['slug' => $slug]);
            $clothes = $this->entityManager->getRepository(Clothes::class)->findOneBy(['name' => $name]);
    
            if(!$designation) {
                return $this->redirectToRoute('designations');
            }
            
            return $this->render('designation/index.html.twig', [
                'designation' => $designation,
                'clothes' => $clothes
            ]);
        }

    Et dans mon show.html.twig j'ai écris ceci :

    <img src="/uploads/{{ clothes.picture }}" alt="{{ clothes.name }}" class="img-fluid">

    Mais j'ai cette erreur :

    Could not resolve argument $name of "App\Controller\DesignationController::show()", maybe you forgot to register the controller as a service or missed tagging it with the "controller.service_arguments"?

    Du coup je ne sais pas trop comment régler le soucis, si quelqu'un saurait m'aider svp ? :) mercii



    • Partager sur Facebook
    • Partager sur Twitter
      15 septembre 2021 à 20:06:43

      Salut

      L'erreur dit qu'il n'arrive pas à deviner la valeur à passer pour $name. Or effectivement, il n'y a pas de paramètre de ce nom dans la route.

      Edit

      Une raison particulière pour ne pas avoir continué dans le sujet précédent ?

      -
      Edité par Ymox 15 septembre 2021 à 20:07:55

      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2021 à 7:29:33

        j'en étais sur que c'était par rapport à ça l'erreur mais je ne vois pas comment je peux mettre 2 paramètres dans la route, parce que j'ai besoin du slug et du name... :euh:

        J'ai pas continué dans le sujet précédent parce que c'était pas le même problème, je voulais pas vous mélanger les sujets... ^^

        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2021 à 8:39:28

          Heu, tu sais comment mettre un paramètre dans une route, qu'est-ce qui (t')empêcherait d'en mettre un second ?

          • Partager sur Facebook
          • Partager sur Twitter
            16 septembre 2021 à 11:57:55

            Bon et bien ça va peut être paraitre bête, mais non, la comme ça je ne vois pas... o_O
            • Partager sur Facebook
            • Partager sur Twitter
              16 septembre 2021 à 14:42:37

              Pour mettre un paramètre dans une route, tu mets {leNomDuParamètre}. Absolument rien ne t'empêche de faire {leNomDUnParamètre}/{leNomDUnAutreParamètre} — et ce quelle que soit la route.

              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2021 à 15:12:33

                Mais du coup je comprends pas... Je dois écrire ça : ?

                    /**
                     * @Route("/designation/{slug}/{name}", name="designation")
                     */



                • Partager sur Facebook
                • Partager sur Twitter
                  22 septembre 2021 à 18:06:30

                  Si c'est ce que tu veux, oui.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 septembre 2021 à 20:07:53

                    Bah non je crois pas. J'ai pas envie d'avoir le name dans l'URL. o_O

                    Mais c'est bon, je vais me débrouiller.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 septembre 2021 à 20:21:41

                      Alors de quoi as-tu besoin et pour quoi (oui, en deux mots) ?

                      Je ne sais pas si tu te rends compte que tu as juste dit que tu avais un problème, mais tu n'as donné aucun contexte suffisant pour qu'on te propose autre chose que des réponses génériques. Tu n'expliques pas ton besoin tu es sur un problème technique, donc la réponse technique semblerait aller de soi. Reste que ce n'est apparemment pas ce dont tu as besoin, alors justement, explique ce dont tu as besoin.  :)

                      -
                      Edité par Ymox 22 septembre 2021 à 20:32:19

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 septembre 2021 à 7:56:46

                        Alors du coup je vais essayer d'être plus explicite. :)

                        Sur mon site, j'ai ceci dans mon menu :

                        Je l'ai affiché dynamiquement avec ceci dans base.html.twig :

                        {% for designation in uuid.findOneDesignation %}
                            <a href="{{ path('designation', { 'slug' : designation.slug }) }}" class="header_menu--title">
                                  {{ designation.name }}
                            </a>
                        {% endfor %}

                        Donc, lorsque je clique sur l'un des 4 liens, j'ai ce genre d'URL :

                        http://127.0.0.1:8080/designation/femmes

                        Lorsque j’atteins cette page, j'aimerais avoir les données présentes dans ma base de donnée, de la table clothes. Du coup j'ai écris cette fonction dans DesignationController :

                            /**
                             * @Route("/designation/{slug}", name="designation")
                             */
                            public function show($slug, $name): Response
                            {
                                $designation = $this->entityManager->getRepository(Designation::class)->findOneBy(['slug' => $slug]);
                                $clothes = $this->entityManager->getRepository(Clothes::class)->findOneBy(['name' => $name]);
                        
                                if(!$designation) {
                                    return $this->redirectToRoute('designations');
                                }
                                
                                return $this->render('designation/index.html.twig', [
                                    'designation' => $designation,
                                    'clothes' => $clothes
                                ]);
                            }

                        Pour information, les champs "Femme", "Homme", "Enfant" et "Grande taille", sont dans la table Designation.

                        Dans la table clothes se trouve les vêtements correspondant, avec leurs images, leurs prix etc. Voila pourquoi je souhaite l'afficher lorsque je clique sur un champ du menu. (Plus tard je créerai une requête pour afficher seulement les vêtements qui correspond à une seule désignation, mais j'aimerais d'abord régler ce soucis.

                        Mais voila, j'ai cette erreur qui persiste :

                        Could not resolve argument $name of "App\Controller\DesignationController::show()", maybe you forgot to register the controller as a service or missed tagging it with the "controller.service_arguments"?

                        Je pense avoir cette fois ci, bien expliqué le problème... J'espère que tu sauras m'aider :euh:

                        Je comprends l'erreur, mais je ne sais pas la résoudre... Merci !


                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 septembre 2021 à 10:20:11

                          Si je peux me permettre de paraphraser, une désignation est une sorte de catégorie, et toi tu souhaites avoir un habit de la catégorie (pour commencer, après tu souhaites avoir tous les habits) à afficher ?

                          La question à se poser est : comment peux-tu déterminer le nom qui va te permettre de récupérer un habit si tu ne le passes pas dans la requête (que ce soit dans l'URL comme paramètre de route, comme "paramètre GET" ou comme "paramètre POST") ? Ce nom, en termes de besoin, il vient d'où ? Tu vas l'utiliser pour quoi ?

                          A savoir que de mon point de vue, récupérer juste les habits correspondant à la désignation, si les relations entre les deux entités sont bien faites, c'est grosso modo simplement faire designation->getClothes().

                          -
                          Edité par Ymox 23 septembre 2021 à 10:25:00

                          • Partager sur Facebook
                          • Partager sur Twitter

                          [Symfony] Could not resolve argument $name

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown