Rediriger à la page précédente dans le zend framework
Je veux ajouter une URL de redirection à mon login formes d'action (une requête) en page d'ouverture, de sorte qu'après loging-en, on peut visiter la page précédente, il ou elle était de surf.
J'ai d'abord pensé à utiliser Zend Session et enregistrer l'url de chaque page dans une variable. mais j'ai lu dans la documentation qu'il a dessus. Alors, est-il une meilleure façon de le faire? ou est-il une autre façon d'utiliser zend session avec pas de frais généraux?
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez saisir l'url d'origine pour la redirection.
Vous pouvez le faire par le Zend_Controller_Request classe via:
ou tout simplement par:
Ensuite, la partie difficile est de passer à travers la demande de l'utilisateur.
Je recommande d'utiliser la bibliothèque Zend_Session, malgré l'utilisation d'un paramètre POST est aussi légitime:
Veuillez noter que l'adresse que nous avons gardé inclut le chemin d'accès de base.
Pour rediriger le client dans la classe du contrôleur, désactiver l'option "prependBase' perdre le chemin de la base d'insertion:
$session->redirect = serialize($this->getRequest())
. En fait c'est la solution que j'utilise maintenant, après un an;)Ce que j'ai trouvé une méthode simple pour y parvenir est juste pour avoir un champ caché dans votre formulaire de connexion.
Maintenant, je ne suis pas sûr si votre formulaire de login est un générique de l'élément HTML ou est en fait une instance de
Zend_Form
, mais si c'est une instance deZend_Form
, vous pourriez simple d'ajouter la suivante:Ensuite dans mon script d'authentification, comme le commentaire ci-dessus, j'ai une simple redirection qui utilise la valeur transmise à retourner à la même page.
Bien évidemment, dans ces deux exemples, ils sont juste écrit pour compacter le code et ne représentent probablement pas la meilleure façon de l'accomplir. Les deux méthodes à l'aide de la
getRequest()
dans mon code ne sont pas réellement intégrés dans laredirect
ou laaddElement
, mais pour les fins de l'exemple j'ai juste glissé dans il.La réponse ci-dessus sera bien évidemment de travail ainsi, à moins d'avoir une énorme page de redirection en cours. La principale raison pour laquelle je suis en cours d'exécution de la mine de cette manière droite maintenant, c'est parce que tous mes formulaires sont en cours d'exécution dans
Zend_Form
et il est aussi agréable d'être en mesure de modifier la valeur de l'cachéreturn
entrée de la zone de texte à des fins de test.Fondamentalement la même chose que Jesta fait, dans sa réponse, mais j'ai ajouté les fonctions suivantes à mon "MW_Form" classe - qui est une super-classe de toutes mes formulaires - assez facile à
$form->trackReferrer($this->getRequest());
par le contrôleur avec n'importe quelle forme. Le getReferrer() fonction prend un "défaut" de l'argument (qui, si l'utilisateur a REFERER en-têtes désactivé, ou il n'y a pas de référent - vous allez vouloir un endroit par défaut de redirection)Le Décorateur Utilisé - vous apporte les benifit de ne pas utiliser toute les lignes dans la
<dl>
créé par zend_form:Exemple d'Utilisation (à partir d'un contrôleur):
My_Form
classe qui s'étendZend_Form
et tous les formulaires de mon étendre à partir de ce....J'ai un predispatch crochet dans le plugin pour l'autorisation. Si (et seulement si) l'utilisateur doit être connecté j'ai enregistrer l'URI de la demande de session et après connexion, rediriger là. Il n'y a pas de frais généraux, sauf lors de la redirection vers formulaire de connexion. Mais c'est un cas où les frais généraux n'est pas un problème. 🙂
Je vois déjà la réponse, mais je voudrais jeter le mien en trop, tout comme une autre façon de la peau du chat genre de transaction, à l'aide de méthodes statiques.
Cela ne fonctionne pas tout le temps, seulement sur un besoin de base.
C'est l'ensemble du code, une partie de mon blog ici (http://hewmc.blogspot.com/2010/08/simple-way-to-store-last-visited-url-in.html)
Cette Zend framework plugin vous permet d'enregistrer le courant et la dernière url et de filtrer tous les url. n'hésitez pas à utiliser et commentaire:
En plus de gnarfs réponse, je l'ai modifiée pour en faire valider - pour ceux d'entre vous qui obtiennent un coup de pied il.
Vous pouvez essayer d'utiliser HTTP_REFERRER en-tête comme ceci:
Si vous n'êtes pas un fan de passer des variables par session, vous pouvez essayer d'obtenir $_SERVER['HTTP_REFERER'] variable de façon sécuritaire. Fondamentalement, il vérifie si votre url de référence et correspondant à votre serveur de nom local, ainsi que le schéma (http/https).
Et puis juste
En tant que par défaut vous pouvez définir les uri ('/')
$this->_redirect($this->getRequest()->getServer('HTTP_REFERER'));
Je suis sûr qu'il y est une certaine construit dans la méthode pour ce faire, quelque part dans ZF, mais je suis paresseux, j'ai fait de cette façon:
Créer votre propre App_Controller_Action classe (créer /library/App/Controller/Action.php). Étendre à tous vos contrôleurs de cette classe
Dans chacun de mes contrôleurs, j'appelle $this->_initAuth(), fonction collé ci-dessous:
Dans mon action authcontroller, je ne les suivants pour que mon formulaire pointe vers l'url complète:
Si la connexion valide, puis je ne les suivants: