Partage
  • Partager sur Facebook
  • Partager sur Twitter

Twig For / else / endfor

Symfony 4

Sujet résolu
    22 janvier 2020 à 22:33:13

    Bonjoir,

    Mon 2e problème est incompréhensible, car je suis convaincu de ne pas être dans l'erreur.

    Je crée des produits dans une route, dans une autre je peux les voir, j'utilise un {% for .. in ... %}.

    je vois bien tous mes produits,

    Cependant je viens de tous les supprimer, ça paraît logique, il y a une erreur sur ma route d'affichage des produits.

    donc je rajoute un {% else %} "il n'y a pas de produits" {% endfor %}

    Cela ne fonctionne pas 

    Quelqu'un aurait un avis sur le sujet ?

    Merci par avance

    • Partager sur Facebook
    • Partager sur Twitter

    la chance sourit aux audacieux

      22 janvier 2020 à 22:48:24

      Salut, 

      Pourrais tu montrer ton code et également l'erreur exact que te retourne symfony?

      Cordialement,

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2020 à 22:58:12

        Salut et merci de ton intention 

        ci-dessous le code

        {% for animal in animal %}
        
        
        
        {% else %}
                 <p class="border border-light p-5 bg-secondary text-dark text-center">Il n'y a pas encore de profil</p>
        {% endfor %}

        désolé j'ai du effacer le milieu du code, openclassroom m'a bloqué, j'ai pas compris pourquoi (je me suis inscris il y a seulement 30 min)

        -
        Edité par PierreRichard78 22 janvier 2020 à 22:59:44

        • Partager sur Facebook
        • Partager sur Twitter

        la chance sourit aux audacieux

          22 janvier 2020 à 23:09:02

          Alors tout d'abord tu as:
          {% for animal in animal %}

          Je trouve ça un peu ambiguë et je pense même que ton erreur peut venir de la. Je te propose de renommer ta variable "animal" contenant ton tableau par "animaux". Beaucoup plus cohérent déjà à la lecture du code. "animaux" avec s qui est un tableau contenant des animaux, et dans la boucle for "animal" qui correspondra à l'animal actuel. 

          Ensuite, tu n'as pas mis dans ton message, l'erreur que tu retournes Symfony, c'est un peu compliqué de t'aider.

          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2020 à 23:17:07

            Oui, j'avoue que je n'ai pas trop prêté attention au nom des variables

            j'ai changé $animaux dans mon controller est un repository findAll

            avec le for je boucle les infos, à l'intérieur il y a animal.nom etc....

            l'erreur y est toujours et c'est : 

            App\Entity\Animal object not found by the @ParamConverter annotation.

            -
            Edité par PierreRichard78 22 janvier 2020 à 23:17:59

            • Partager sur Facebook
            • Partager sur Twitter

            la chance sourit aux audacieux

              22 janvier 2020 à 23:31:40

              Et bah voilà déjà avec l'erreur, on sait déjà de quoi on parle. 

              Par hasard tu n'aurais pas 2 routes qui ont le même format ? Exemple /animal/{id} et /animal/view.

              Regarde au niveau des annotations de ton controller, si tu as effectivement 2 routes qui ont le même format alors, t'as une des 2 routes qui est catch par la request et le souçi c'est qu'il catch la mauvaise route. Dans ce cas, tu réajustes l'ordre de tes routes pour que la bonne route soit appelé en premier.

              Si tu n'as pas 2 routes qui ont le même format, je te propose de mettre ton controller ici et surtout les annotations pour pouvoir investiguer.

              -
              Edité par Awadanp 22 janvier 2020 à 23:31:59

              • Partager sur Facebook
              • Partager sur Twitter
                22 janvier 2020 à 23:36:55

                non aucune route n'est pareil

                voici le controller 

                <?php
                
                namespace App\Controller;
                
                use App\Entity\User;
                use App\Entity\Animal;
                use App\Form\AnimalType;
                use App\Repository\AnimalRepository;
                use Doctrine\ORM\EntityManagerInterface;
                use Symfony\Component\HttpFoundation\Request;
                use Symfony\Component\Routing\Annotation\Route;
                use Liip\ImagineBundle\Imagine\Cache\CacheManager;
                use Symfony\Component\HttpFoundation\File\UploadedFile;
                use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
                use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
                
                class AnimalController extends AbstractController
                {
                    /**
                     * @Route("/creation_animal/{id}", name="creationProfilAnimal")
                     */
                    public function CreationProfilAnimal(User $user, Request $request)
                    {
                        $animal = new Animal();
                        $form = $this->createForm(AnimalType::class, $animal);
                        $form->handleRequest($request);
                        $user = $this->getUser();
                
                        if ($form->isSubmitted() && $form->isValid()) 
                        {
                            $animal->setProprietaire($user);
                            $entityManager = $this->getDoctrine()->getManager();
                            $entityManager->persist($animal);
                            $entityManager->flush();
                
                            return $this->redirectToRoute('profilAnimal', array('id' => $user->getId()));
                        }
                
                        return $this->render('animal/creationProfilAnimal.html.twig',[
                            'form' => $form->createView(),
                            'user' => $this->getUser()
                        ]);
                    }
                
                
                    /**
                     * @Route("/profil_animal/{id}", name="profilAnimal")
                     */
                    public function ProfilAnimal(User $user, AnimalRepository $repoAnimal, Animal $animal)
                    {
                      $user = $this->getUser();
                      $animaux = $repoAnimal->findAnimalByIdProprio($user);
                
                      $age = $animal->getAge();
                      $time = new \DateTime('now');
                      $year = $time->format("Y");
                      $agePet = $year - $age;
                      $animal->setAge($agePet);
                      
                        return $this->render('animal/profilAnimal.html.twig', [
                            'animaux' => $animaux,
                            'user' => $user,
                            'pet' => $animal
                        ]);
                    }
                
                
                
                    /**
                     * @Route("/modification_profil_animal/{id}", name="modificationProfilAnimal", methods={"GET","POST"})
                     */
                
                    public function ModificationProfilAnimal(User $user, Animal $animal, Request $request, CacheManager $cacheManager, UploaderHelper $helper)
                    {   
                        $form = $this->createForm(AnimalType::class, $animal);
                        $form -> handleRequest($request);
                        $user = $this->getUser();
                
                        if($form->isSubmitted() && $form->isValid())
                        {
                            if($animal->getImageFile() instanceof UploadedFile)
                            {
                                $cacheManager->remove($helper->asset($animal, "imageFile"));
                            }
                
                            $animal->setProprietaire($user);
                            $this->getDoctrine()->getManager()->flush();
                            $this->addFlash('profilAnimal', $user->getPrenom().' Le profil de ' . $animal->getNom() .' a bien été modifié');
                        	return $this->redirectToRoute('profilAnimal', array('id' => $user->getId()));
                        }
                
                        return $this -> render('animal/modificationProfilAnimal.html.twig', [
                            'form' => $form->createView(),
                            'animal' => $animal,
                            'user' => $this->getUser()
                        ]);
                    }
                
                
                        /**
                     * @Route("/suppression_profil_animal/{id}", name="suppressionProfilAnimal", methods="DELETE")
                     */
                    public function delete(Animal $animal, EntityManagerInterface $entityManagerInterface, Request $request, CacheManager $cacheManager, UploaderHelper $helper)
                    {
                        if($this->isCsrfTokenValid('delete' . $animal->getId(), $request->get('_token')))
                        {
                            $cacheManager->remove($helper->asset($animal, "imageFile"));
                            
                            $entityManagerInterface->remove($animal);
                            $entityManagerInterface->flush();
                            $this->addFlash('success', 'La suppression a été effectuée');
                        }
                
                        return $this->redirectToRoute('accueil');
                    }
                
                
                    /**
                     * @Route("/liste_animaux", name="listeAnimaux")
                     */
                    public function Allpets(AnimalRepository $repoAnimal)
                    {   
                
                        
                        $animaux = $repoAnimal->findAll();
                
                        return $this -> render('animal/listeAnimaux.html.twig', [
                            'animaux' => $animaux,
                            'user' => $this->getUser()
                        ]);
                    }
                
                
                
                
                
                
                
                
                
                
                
                }
                
                • Partager sur Facebook
                • Partager sur Twitter

                la chance sourit aux audacieux

                  22 janvier 2020 à 23:49:17

                    /**
                       * @Route("/modification_profil_animal/{id}", name="modificationProfilAnimal", methods={"GET","POST"})
                       */
                   
                      public function ModificationProfilAnimal(User $user, Animal $animal, Request $request, CacheManager $cacheManager, UploaderHelper $helper)
                      {  

                  Alors soit dans le prototype de ta fonction User $user ici est de trop. Soit, il te manque un paramètre dans ta route.
                  J'opterai pour la première solution, ton User $user est de trop.

                  -
                  Edité par Awadanp 22 janvier 2020 à 23:50:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 janvier 2020 à 0:00:20

                    J'ai retiré l'injection de l'entity User et non le problème persiste,

                    tu es sur la fonction modification, c'est celle du dessus, le profil. Je ne comprends pas d'où peut venir le problème

                    mais on est d'accord pour le twig, avec un else c'est la solution ?

                    j'ai retiré qq fonctions qui n'ont rien à voir 

                        /**
                         * @Route("/profil_animal/{id}", name="profilAnimal")
                         */
                        public function ProfilAnimal(User $user, AnimalRepository $repoAnimal, Animal $animal)
                        {
                          $animaux = $repoAnimal->findAnimalByIdProprio($user);
                    
                    
                          
                            return $this->render('animal/profilAnimal.html.twig', [
                                'animaux' => $animaux,
                                'user' => $user
                            ]);
                        }

                    l'id de la route, est la personne connecté qui me permet de rechercher dans le repo ses animaux 

                    -
                    Edité par PierreRichard78 23 janvier 2020 à 0:07:26

                    • Partager sur Facebook
                    • Partager sur Twitter

                    la chance sourit aux audacieux

                      23 janvier 2020 à 0:10:09

                      Le code twig que tu montres n'aide pas, c'est celui qui est dans le for principal qu'il faut car de toute façon avec ce message  d'erreur tu ne rentres pas dans le else
                      • Partager sur Facebook
                      • Partager sur Twitter
                      le bienfait n'est jamais perdu
                        23 janvier 2020 à 0:21:47

                        Il n'y a qu'un for 

                        voici tout le twig :

                        {% extends 'base.html.twig' %}
                        
                        {% block title %}Animal{% endblock %}
                        {% block monTitre %}Profil Pet{% endblock %}
                        
                        {% block body %}
                        
                        
                        
                            <div class="row justify-content-center">
                                
                        
                                {% for animal in animaux %}
                                    <div class="col-6 border border-dark text-center p-3">
                                        <div><img style="width:300px" src="{{asset('images/animaux/' ~ animal.image) }}"></div>
                        
                        
                                        <div class="row m-1">
                                            <div class="col"><strong>Nom:</strong> <br> {{ animal.nom}}</div>
                                            <div class="col"><strong>Espèce:</strong> <br> {{ animal.espece.nom}}</div>
                                            <div class="col"><strong>Age:</strong> <br> {{ animal.age}}</div>
                                            <div class="col"><strong>sexe:</strong> <br> {{ animal.sexeType}}</div>
                                            <div class="col"><strong>poids:</strong> <br>{{ animal.poids}} kg</div>
                                        </div>
                        
                                        <div class="row m-1 mt-4 ">
                                            <div class=" col-12 text-center"><strong>description: </strong></div>
                                            <div class=" col-12 text-left bg-light p-4">{{ animal.description}}</div>
                                        </div>
                        
                        
                                        <div>Propriétaire: {{ animal.proprietaire.prenom}}</div>
                                        
                                        
                                    </div>
                                {% else %}
                                <p> pas de profil </p>
                                {% endfor %}
                        
                            </div>
                        
                        
                        {% endblock %}
                        



                        • Partager sur Facebook
                        • Partager sur Twitter

                        la chance sourit aux audacieux

                          23 janvier 2020 à 0:34:47

                          Si j'ai bien compris du coup, c'était pas User qui fallait retirer mais Animal et dans la fonction faire appel à ton repository (fct: findAnimalByProprio) pour récupérer la data.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 janvier 2020 à 0:39:23

                            oh GG ^^

                            bravo, un grand merci

                            oui l'entity animal je l'avais utilisé pour afficher le nom de l'animal dans le title, mais pourrais-tu m'expliquer pourquoi ça a merdé ? un conflit d'entity ?

                            • Partager sur Facebook
                            • Partager sur Twitter

                            la chance sourit aux audacieux

                            Twig For / else / endfor

                            × 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