Zend Framework, ce que $this->_forward est en train de faire
Je voudrais quelqu'un pour m'expliquer ce que _forward est exactement fait, je ne peux pas voir si _forward est également rendu l'attaché de vue de l'action ou de l'exécution de l'action.
Aussi est-il possible de passer en argument à $this->action dans un script de vue ?
Plus généralement, mon problème est de savoir comment le code d'une page de confirmation, disons que la saisie de l'utilisateur certaines choses et que vous voulez lui montrer de confirmation, est en avant est la moyenne pour ce cas ?
- merci pour le tag modifier oublié php ^^
- J'ai ajouté quelques mots à ma question
Vous devez vous connecter pour publier un commentaire.
_forward est une redirection interne. Où que _redirect envoie un en-tête qui indique au navigateur du client vers une autre URL, _forward dit le Répartiteur pour rediriger la demande de quelque part d'autre.
Si vous considérez que la normale expédition de commande de:
Appelant _forward en tout point que la progression va provoquer les étapes suivantes pour ne pas être exécuté. Donc, si vous appelez _forward dans preDispatch(), uneaction() ne sera pas appelé et ainsi de suite. Si vous _forward() dans uneaction() et que vous utilisez le viewRenderer d'aide d'action pour rendre votre point de vue (vous laissant le cadre choisir ce script de vue pour le rendu), alors pas de script de vue sera rendu en uneaction().
Lorsque la demande est transmise au nouveau Contrôleur /Module de l'intégralité de la commande processus sera répété là.
Vous pouvez déterminer quelle action est distribué à l'aide de:
$action sera l'url de la forme de l'action donc, si la méthode est le nom de 'someKindOfAction', $action va contenir "quelque-sorte-de". Vous pouvez faire cela aussi bien pour les contrôleurs et modules.
Mon expérience avec Zend est limité et j'espère que je ne suis pas vous montrer quelque chose que vous avez déjà vu, mais selon les docs (12.7.6. Les Méthodes De L'Utilitaire):
Il semble donc qu'un contexte de quand elle est appelée questions. Dans ce dernier cas, il va d'abord exécuter l'action, à partir de laquelle il est appelé puis exécuter l'transmis à l'action. La seule exception est lorsqu'il est appelé à partir de la preDispatch gestionnaire
Je pense qu'il est important de noter que _forward est très inefficace, et vous devriez toujours faire appel à votre méthode directement. Lorsque vous faites un _forward, la fonction init(), avant et après l'expédition de fonctionner à nouveau. Selon ce que vous avez dans votre init, vous pouvez exécuter (et insert) de la même base de données d'enregistrement deux fois.
Il est facile à utiliser, mais le gaspillage. Si vous le profil de votre code, et frapper votre tête pourquoi tout est appelée deux fois, _forward est la raison. Si vous êtes comme moi et que vous instanciez un peu d'objets dans l'init() pour une utilisation tout au long de la classe, vous vous retrouvez à l'instanciation tout deux fois! J'ai fait des tests de charge sur mon code et j'ai eu de meilleures performances en appelant le nom de l'action directement, comme les foo(), au lieu de _forward('foo');
Un autre hors sujet astuce je pense que la plupart des gens savent, c'est utiliser les guillemets simples dans la mesure du possible, le sinus de l'analyseur PHP doit vérifier une chaîne de caractères pour l'embarqué variables. Je ne sais pas combien réel de performance dans le monde cela va donner, surtout si vous utilisez un cache d'opcode, mais c'est une bonne pratique.
$this->_request
De l'avant est ment pour être utilisé lors de la redirection externe n'est pas les bonnes options.
Cas d'utilisation (peu ankward, mais le mieux que je puisse faire jusqu'):
Vous disposez d'un formulaire qui peut ajouter à votre animal de compagnie soit chien ou chat). Vous avez des modèles différents pour chacun. Vous incluez un select dans votre formulaire pour le sélectionner chat /chien. Ensuite, dans votre action, vous ne:
Et vous gérer différentes choses pour chiens et chats dans des actions distinctes. L'avantage, c'est que TOUS les paramètres sont envoyés. En contraste lorsque vous l'avais utilisé $this->_redirect() le POSTE paramètres seront perdus. C'est, dans certains cas, l'intention de comportement (par exemple après l'ajout d'un commentaire que vous faites une redirection vers les commentaires de la page de la liste pour éviter les doubles posts et le message "la page a besoin d'envoyer des données à nouveau...".
Une partie du Cadre docs, je le jure utilisé pour être, il a expliqué l'envoi de flux de travail à un niveau général. Theres ce diagramme, mais son awefully compliqué à expliquer ce que _forward n'.
Lorsque, dans une action _forward sera mis
$request->isDispatched = false
, et de régler la demande d'appeler le contrôleur/action spécifiée dans _forward. Au cours de postDispatch, le isDispatched est vérifiée si sa faux, le tout fonctionne à nouveau à l'aide de la nouvelle demande.... Donc Si dans votre action, vous êtes manuellement rendre la vue, ils vont encore se rendait. Tout dans l'action arrivera encore, juste une autre action doit AUSSI se passer par la suite.
[modifier après la question edit]
De l'avant n'est pas fait pour la réponse/confirmation-après-après - utiliser une redirection pour que.
$this->_helper->redirector->gotoUrl()
etc.