Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai développé un site assez complet sans le ZF (Sans framework tout court d'ailleurs) et j'avais une petite technique de redirection après une validation de formulaire.
Je m'explique :
Lorsque qu'un utilisateur va sur mon forum et entre un nouveau post, lorsqu'il valide, il arrive sur une page de redirection (http://redirection.html&...) qui lui indique que sont message à bien été posté. Au bout de 3s il est automatiquement redirigé vers le topic auquel il a répondu.
Je faisait cela dans le but d'éviter à l'utilisateur d'avoir le message qui lui demande s'il veut renvoyer de nouveau la valeur des $_POST etc lorsqu'il faisait précédent avec son navigateur. Maintenant, lorsqu'il fait précédent, il arrive sur la page de redirection qui l'envoi de nouveau sur son topic. Ainsi, cela évite en parti les problèmes de double post etc.
Mais qu'elle est donc ma question ?
Je voulais savoir comment VOUS gérez vous ce type de situation avec le ZF?
Avez vous ce même système de redirection où avez vous une autre technique ?
Merci d'avance pour vos réponses.
Dernière modification par slaughter (02-07-2008 14:43:37)
Hors ligne
cette approche s'appelle PRG Post Redirect Get tu peux la chercher sur wikipédia c'est bien expliqué.
avec ZF je fais les actions suivantes
- showForm affiche le formulaire l'orsque l'utilisateur valide le formulaire il invoque l'action checkForm
- checkForm prends les données et les mets en session, vérifie les données et fait un redirect soit vers showForm si les données sont invalides soit sur save
- save prends les donnée en session et effectue le traitement approprié.
en général ma procédure de vérification est très courte et cela fonctionne parfaitement. pour être purement PRG et c'est ce que je fais dans le cas de procédure de vérification plus lourde il faut introduire une action de plus
- showForm affiche le formulaire lorsque l'utilisateur valide le formulaire il invoque l'action postForm
- postForm prends les données et les mets en session et fait un redirect soit vers checkForm
- checkForm vérifie les données et fait un redirect soit vers showForm si les données sont invalides soit sur save
- save prends les donnée en session et effectue le traitement approprié.
si je veux faire afficher un message pour dire à l'utilisateur de patienté que j'ai bien pris en compte sa demande je le fais en javascript dans l'action de post
lorsque l'utilisateur clique j'affiche le message et je poste les données le message reste affiché le temps d'obtenir une réponse du serveur.
Hors ligne
Merci beaucoup pour cette procédure.
Il me manque juste un petit détail. Comment gères tu le fait que l'utilisateur puisse faire "précédenté" dans son navigateur et rappeler l'action save et donc provoquer un double post ?
Hors ligne
non le ne peut pas faire de double post l'action save ne fait pas d'affichage elle consomme les données de formulaire en session et redirige vers une autre action (au choix) elle place dans la session un message qui sera affiché par cette action et vide la session des données de formulaire
du coup s'il y a retour arrière l'utilisateur ne revient pas sur le checkForm mais sur le save et celui-ci n'a rien à sauver car la session est vide. il ne fait donc que refaire la redirection
un retour du client ne fait que réafficher la page courrante
Hors ligne
Bonjour slaughter,
Pour éviter le message de repost, je fais comme toi avant :
- mon form renvoie vers un contrôleur / action qui n'affiche rien.
- à la fin du traitement, je fais une redirection 302 ($this->_redirect en ZF) vers le contrôleur/action qui va bien pour afficher le résultat (la page d'affichage dépendant souvent du traitement lui même...).
- dans certains cas critiques où il ne faut pas que le formulaire soit submitté 2 fois, ça ne te dispense pas de checker si le formulaire a déjà été traité
A+, Philippe
Hors ligne
Ok. Bon ba je vois que l'on a à peu prêt tous la même technique. Pour ma part je faisait la redirection et également la vérificatio que le formulaire n'avait pas déjà été "submitté" une première fois avant.
Donc tout cela me rassure. Je continu à faire comme avant.
Merci
Hors ligne
Pages: 1