Bonjour à tous, j'ai une application sous symfony et toutes mes routes fonctionnent parfaitement sauf une à cause d'une erreur de ParamConverter.

La route est appelé du côté frontà l'aide d'AJAX

Premièrement voici mon code de base :


    /**
     *
     * @Route("/modifier/images/{id}", name="edit_imgTest", methods={"POST"})
     */
    public function editImg(ImageListService $imageListService, EntityManagerInterface $em, ImageListeRepository $imageListeRepository, ListeRepository $listeRepository, Request $request,Liste $liste): Response
    {

        [
            "idList" => $idList,
            "fileInput" => $fileInput,
            "fileDeleted" => $fileDeleted,
            "token" => $token,
            "description" => $description

        ] = $request->request->all();

        $authenticatedUser = $this->getUser();

        if (!$this->isCsrfTokenValid('editPhoto', $token)) {

            throw new InvalidCsrfTokenException("Le jeton CSRF est invalide.");
        }

        $imageListService->changePositionImage($idList, $authenticatedUser, $imageListeRepository, $em);
        $this->handleImages($fileInput, $imageListService, $liste, $em,$authenticatedUser);
        $liste->setDescription($description);
        $em->flush();

        $this->handleDeletedFile($fileDeleted, $imageListService, $liste, $em, $imageListeRepository,$authenticatedUser);

        return new Response('Opération réussie', 200);
    }

Deuxièmement tentative
J'ai essayé ici de ne pas passer par le paramConverter et de récuperer ma liste à l'aide de l'id

     /**
     * 
     * @Route("/modifier/images/{id}", name="edit_imgTest", methods={"POST"})
     */
    public function editImg(ImageListService $imageListService, EntityManagerInterface $em, ImageListeRepository $imageListeRepository, ListeRepository $listeRepository, Request $request,  string $id): Response
    {

      $liste = $listeRepository->find($id);

        [
            "idList" => $idList,
            "fileInput" => $fileInput,
            "fileDeleted" => $fileDeleted,
            "token" => $token,
            "description" => $description

        ] = $request->request->all();

        $authenticatedUser = $this->getUser();

        if (!$this->isCsrfTokenValid('editPhoto', $token)) {

            throw new InvalidCsrfTokenException("Le jeton CSRF est invalide.");
        }
        $imageListService->changePositionImage($idList, $authenticatedUser, $imageListeRepository, $em);
        $this->handleImages($fileInput, $imageListService, $liste, $em,$authenticatedUser);
        $liste->setDescription($description);
        $em->flush();

        $this->handleDeletedFile($fileDeleted, $imageListService, $liste, $em, $imageListeRepository,$authenticatedUser);

        return new Response('Opération réussie', 200);
    }

Troisième tentative
J'ai essayé de passer une annotation au paramConverter pour l'aider mais sans succès

    /**
     * @ParamConverter("liste", class="App\Entity\Liste", options={"mapping": {"id": "id"}})
     * @Route("/modifier/images/{id}", name="edit_imgTest", methods={"POST"})
     */

Exemple de route qui fonctionne

Par exemple cette route fonctionne

    /**
     * @Route("/{id}", name="app_liste_show", methods={"GET"})
     */
    public function show($id, Liste $liste, ListeRepository $listRepository): Response
    { {
            $liste = $listRepository->findListWithProducts($id);

            return $this->render('liste/show.html.twig', [
                'liste' => $liste,

            ]);
        }
    }

Mon id est un UUID au format string, je ne pense pas que le problème viennent de là mais je tenais à le préciser

Merci d'avance à toutes les personnes qui prendront de leurs temps pour m'aider !

5 réponses


alexdev67
Auteur
Réponse acceptée

Solution trouvé , les routes de symfony fonctionne avec un système de spécificité, donc j'ai du remonté ma route dans mon controller pour qu'elle soit prise en compte avant

C'est juste une suggestion, je connais pas assez SF pour ça.

As-tu essayé de passer le paramètre $liste en premier élément de la méthode ?

 public function editImg(Liste $liste, ImageListService $imageListService, EntityManagerInterface $em, ImageListeRepository $imageListeRepository, ListeRepository $listeRepository, Request $request): Response
 { ... }

Merci pour ta suggestion, j'ai essayé et j'ai toujours le même problème (j'ai également essayé en passant l'id en premier paramètre) :/

En testant pas mal de choses je suis tombé sur une piste :

Quand j'appele la route avec cette url cela fonctionne :

 /**
     * 
     * @Route("/modifierTest/abc/{id}", name="edit_imgTest", methods={"POST"})
     */

Mais quand je veux changer vers un url plus "friendly" cela ne fonctionne pas


    /**
     * 
     * @Route("/modifier/abc/{id}", name="edit_imgTest", methods={"POST"})
     */

J'avoue être un peu désamparé... je n'ai pas d'autre url qui à le même nom et même si je change pour un autre nom cela ne fonctionne pas :


    /**
     * 
     * @Route("/modifier/efvfdeza/{id}", name="edit_imgTest", methods={"POST"})
     */

Solution trouvé , les routes de symfony fonctionne avec un système de spécificité, donc j'ai du remonté ma route dans mon controller pour qu'elle soit prise en compte avant