Redirection formulaire depuis un contrôleur imbriqué dans Symfony 2

Ce contenu a 5 ans et n'est donc peut-être plus à jour.

Il se peut qu’un jour dans votre vie de développeur Symfony, vous ayez besoin d’inclure un contrôleur avec un formulaire et que celui-ci fasse une redirection si le formulaire est valide.
Et dans ce cas la, il se peut que vous vous heurtiez à une erreur au moment de la redirection. Voici comment y remédier dans ce cas précis.

Nous allons imaginer pour exemple que nous travaillons sur un bundle nommé AcmeTaskManagerBundle et qui est un gestionnaire de tâches. Sur chaque tâche, nous pouvons déposer un commentaire.
Ce bundle contient 2 contrôleurs: TaskController qui gère les tâches et CommentController qui gère les commentaires que l’ont peu déposer sur chaque tâche.

Nous allons nous attaquer à la page de détail des tâches qui doit afficher la tâche et ses détails ainsi qu’un formulaire pour déposer un commentaire et en dessous la liste des commentaires.

Donc d’un côté nous allons gérer l’affichage de la tâche dans le TaskController et de l’autre le formulaire et la liste des commentaires dans le CommentController.

Et pour le template de la page de détail de tâche:

A partir de ce moment, tout s’affiche correctement. Vous pouvez même créer votre commentaire. Seulement voila, quand vous appuyez sur le bouton submit, c’est le drame: l’application vous balance une erreur du genre

An exception has been thrown during the rendering of a template (“Error when rendering “http://taskmanager.local/app_dev.php/task/view/1″ (Status code is 302).”) in src/Acme/TaskManagerBundle/Resources/views/Task/view.html.twig at line 7.

Horreur, malheur ! 😮

En gros il nous dit que le contrôleur que nous avons inclus (AcmeTaskManagerBundle:Comment) essaye de faire une redirection mais qu’il ne peut pas.

Et bien pour ce cas très précis, il y a une petite astuce vraiment toute bête à mettre en place.

En effet, dans la méthode createAction du contrôleur AcmeTaskManagerBundle:Comment, il suffit de rajouter le paramètre “action” à la fonction createForm, comme ceci:

0 0 vote
Article Rating
S'abonner
Me notifier des
guest
1 Commentaire
plus anciens
plus récents plus de votes
Inline Feedbacks
View all comments
Bachir T

Bonjour,

J’ai le même problème sur mon site, j’ai une vue où j’affiche le détail d’une annonce et dans la même vue j’ai un render d’un autre controller MessageControllerAdd où l’utilisateur pose des questions.

Dans mon MessageControllerAdd j’ai une $request (ce n’est pas la cas dans ton exemple) et qu’on je submit le message, j’ai bien le Post j’ai bien la valeur dans ma base mais sur la page j’ai toujours le message écrit et la page ne se rafraîchi pas. et si je fais un F5 il post à nouveau le même message.

Merci pour le retour.

Cdt.