Object not found by the @ParamConverter ( je bloque...)

Par alexdev67, il y a 2 ans


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

Kareylo, il y a 2 ans

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 { ... }
alexdev67, il y a 2 ans

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) :/

alexdev67, il y a 2 ans

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"}) */
alexdev67, il y a 2 ans

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

Sadiarafay1262, il y a 2 ans

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