2010-11-01 8 views
1

Je travaille actuellement sur un site framework zend utilisant un ACL.Envoyer POST du site PHP Zend-Framework

La liste de contrôle d'accès fonctionne et utilise une base de données pour le stockage des privilèges. Ce que j'ai fait jusqu'à maintenant est, dans un pré-décalage, je capture où l'utilisateur voulait aller, et s'ils ont besoin de se connecter pour y arriver, la page affiche le formulaire de connexion. J'ai également capturé si un utilisateur a soumis un formulaire et stocké les données (emplacement et données de formulaire). Aucun problème jusqu'à présent.

L'utilisateur soumet le formulaire de connexion, puis je vérifie si j'ai un emplacement pour les envoyer, encore une fois pas de problèmes ici, cela fonctionne.

Cependant, je veux être en mesure de présenter les données de formulaire originales maintenant ils sont autherised - le seul problème est, si je les rediriger vers la page, l'appel à:

$this->getRequest()->isPost() 

échoue car il n » t une demande de publication.

Je peux rediriger l'utilisateur vers la page de connexion réussie, et dans le set preDispatch $ _POST aux données initialement capturées, cela fonctionne comme le POST d'origine est toujours debout, cela fonctionne mais je ne pense pas est la bonne façon de faites ceci - en particulier l'URL - évidemment la page affichée est correcte, le formulaire a été soumis correctement, mais l'URL est du processus de connexion.

Évidemment, je pourrais changer d'utiliser $this->getRequest()->isPost() mais comme il y a de grandes quantités qui auraient besoin de changer j'espérais ne pas avoir à faire cela.

+0

duplication possible de [Rediriger vers une nouvelle page avec des données POST (PHP/Zend)] (http://stackoverflow.com/questions/1309456/redirect-to-new-page-w-post-data-php- zend) – Gordon

+0

C'est quelque chose de très similaire mais en même temps différent - J'ai actuellement utilisé essentiellement cette solution, mais comme je le dis je finis avec l'utilisateur étant montré les résultats du POST, mais à la mauvaise URL, qui n'est pas exactement important, mais je préférerais que l'URL soit correcte. – Scoobler

+0

@Scoobler Vérifiez Netbeans 7.0. Il a de belles options refactor. Vous allez changer tous les événements en quelques clics. – takeshin

Répondre

0

La façon dont cela se fait habituellement (vu cela sur beaucoup de sites), serait de stocker les données de formulaire et l'action demandée en session, puis de rediriger l'utilisateur vers une page de connexion. Lorsque la connexion est autorisée, vous lisez la session pour toute action en attente, rechargez le formulaire et le remplissez avec les données de la session (en effaçant par la suite toute action en attente de la session). L'utilisateur devra simplement cliquer à nouveau sur Envoyer. L'autre façon de le faire serait d'utiliser HttpClient et de soumettre les données en tant que POST avec lui.

+0

Merci pour l'idée, mais aurais deux problèmes ici - je saisis l'action et le contrôleur de l'utilisateur est sur leur chemin à seulement lorsque leur autherisation a expiré (qui aurait pu être un délai d'attente) afin de savoir d'où ils venaient et revenir elles prendraient plus de temps pour l'utilisateur.Je préférerais que cela continue ce que l'utilisateur faisait dès qu'il est autherised. Avez-vous plus de détails sur l'utilisation de HttpClient - J'ai essayé comme le dit la documentation, mais ne semblait pas fonctionner comme je le voulais. – Scoobler

+0

Vous trouverez la documentation de Zend_Http_Client ici: http://framework.zend.com/manual/1.11/fr/zend.http.client.advanced.html. Alternativement, vous pouvez utiliser fopen() avec stream_context_create(), comme dans cet exemple ici: http://www.php.net/manual/fr/function.stream-context-create.php#72017 – netcoder

+0

J'ai essayé les deux ces méthodes maintenant et il semble qu'ils font tous deux une chose très similaire à zend transmettre la demande - ils soumettent les données et obtenir les résultats, puis les montrer dans la page actuelle - ce qui me laisse avec la mauvaise URL encore. – Scoobler