Symfony ParamConverter en cas enregistrement absent

Résolu/Fermé
Clui - 31 août 2021 à 16:11
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 31 août 2021 à 22:36
Bonjour et merci d'avance pour votre aide,
je développe avec Symfony, j'utilise l'annotation ParamConverter, tout marche à merveille, le hic est quand on passe un id dans l'uri qui n'existe pas dans la base de données, un jolie message d'erreur qui s'affiche ( object not found by the @ParamConverter annotation.) à l'inverse de ça quand on passe un id existant tout marche bien.

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
31 août 2021 à 21:23
Bonjour,

C'est bien le comportement attendu de ParamConverter : si aucun enregistrement en base ne correspond à l'identifiant passé dans l'url, le site retourne alors une erreur 404 (voir le code de retour http en bas à gauche dans le Profiler), ce qui est normal puisque l'utilisateur demande une page qui n'existe pas.
Le "joli" message d'erreur (et la stack trace) s'affiche uniquement car tu es en environnement de développement (APP_ENV=dev dans fichier .env). Tu peux tester avec l'environnement de prod pour voir la page 404 de base de Symfony (que tu peux évidemment personnaliser).

Bonne journée,
0
Merci pour la réponse, en effet c'est ce que j'avais compris, vu que je monte une api qui retourne des réponses json, je voulais détecter l'erreur dans la function et retourner une réponse de non existence de l'article.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524 > Clui
31 août 2021 à 22:03
ParamConverter le fait automatiquement (retour 404 si l'objet n'existe pas), ce qui est également le comportement attendu pour une api via http, peu importe le format (json, xml, etc).

Pour personnaliser le message du retour 404, le plus simple est d'utiliser directement le ProductRepository à la place de ParamConverter :
https://symfony.com/doc/current/doctrine.html#fetching-objects-from-the-database
0
Clui > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
31 août 2021 à 22:08
Donc la méthode classique quoi, je récupére l'id je le cherche via le repository. Dommage avec ParamConverter on peut se passer des instructions repository.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524 > Clui
Modifié le 31 août 2021 à 22:46
Si c'est juste pour se passer du repository, on peut utiliser d'autres annotations (ou créer sa propre annotation) : https://symfony.com/bundles/SensioFrameworkExtraBundle/current/annotations/converters.html#2-fetch-via-an-expression

Mais c'est juste des raccourcis pour des fonctions de contrôleur simple. Il sera souvent plus pratique d'utiliser le repository.
0