_forward
ist eine interne Umleitung. Wobei als _redirect
eine Kopfzeile gesendet wird, die dem Browser des Clients mitteilt, dass er zu einer anderen URL gehen soll, weist _forward den Dispatcher an, die Anfrage intern woanders umzuleiten.
Wenn man bedenkt, den normalen Versandauftrag von:
preDispatch()
someAction()
anotherAction()
postDispatch()
Aufruf _forward
an irgendeiner Stelle in diesem Verlauf wird die folgenden Schritte dazu führen, nicht ausgeführt werden. Also, wenn Sie _forward
in preDispatch()
aufrufen, wird someAction()
nicht aufgerufen und so weiter. Wenn Sie _forward()
in someAction()
verwenden und Sie den Aktionshelfer viewRenderer verwenden, um Ihre Ansichten zu rendern (Sie lassen das Framework auswählen, welches View-Skript gerendert wird), wird kein View-Skript in someAction()
gerendert.
Wenn die Anfrage an den neuen Controller/Modul weitergeleitet wird, wird der gesamte Versandvorgang dort wiederholt.
Hinweis:
Wenn Sie nach vorne innen someAction()
-anotherAction()
Sie es wie dieser
return $this->_forward('another');
tun müssen
Sie sollten einen hinzufügen return
-$this->_forward()
oder Ihre aktuelle Aktion wird auch weiterhin vor der Weiterleitung an die Ausführung die andere Aktion.
Beachten Sie auch, dass die Ansicht, dass another.phtml
wird gerendert wird während, wenn eine Umleitung zu tun, ZF den Browser anweisen würde http://example.com/controller-name/action-name zu laden als _redirect()
sendet einen Header, was bedeutet, dass Sie eine neue HTTP-Anfrage erstellen und den gesamten Versandprozess damit durchlaufen.
Last eine bestimmte Ansicht innerhalb einer Aktion zu machen, verwenden Sie die viewRenderer
Aktion Helfer:
// Bar controller class, foo module:
class Foo_BarController extends Zend_Controller_Action
{
public function addAction()
{
// Render 'bar/form.phtml' instead of 'bar/add.phtml'
$this->_helper->viewRenderer('form');
}
public function editAction()
{
// Render 'bar/form.phtml' instead of 'bar/edit.phtml'
$this->_helper->viewRenderer->setScriptAction('form');
}
public function processAction()
{
// do some validation...
if (!$valid) {
// Render 'bar/form.phtml' instead of 'bar/process.phtml'
$this->_helper->viewRenderer->setRender('form');
return;
}
// otherwise continue processing...
}
}
dies Siehe vorwärts vs umleiten http://stackoverflow.com/questions/2551238/what-is-the-difference -between-redirect-und-forward-in-zend-framework –
wo hast du 'setViewRender', ich kenne' setView' und ich weiß 'render', aber ich finde' setViewRender' nicht in den api docs . – RockyFord