2012-04-05 8 views
0

Mögliche Duplizieren:
What is the difference between redirect and forward in Zend frameworkWas ist der Unterschied zwischen forward und redirect oder setRenderView im Zend Framework?

Ich bin neu in Zend Framework, wenn ich versuche, foward zu verwenden, umleiten setViewRender in der Steuerung, was sind ihre diffences?

+3

dies Siehe vorwärts vs umleiten http://stackoverflow.com/questions/2551238/what-is-the-difference -between-redirect-und-forward-in-zend-framework –

+1

wo hast du 'setViewRender', ich kenne' setView' und ich weiß 'render', aber ich finde' setViewRender' nicht in den api docs . – RockyFord

Antwort

0

Ich bin mir ziemlich sicher, dass eine Umleitung Sie zu einer bestimmten Seite/Controller umleitet und somit alle Voranzeigeprozesse durchläuft. Wenn Sie die Seite anzeigen können, wird setViewRender nur die ausgewählte Ansicht ausgeben und alle ignorieren das Zeug, das der Controller usw. handhabt. (Ich habe nicht zend für eine Weile jedoch verwendet)

2

Als official docs sagen:

  • _forward($action, $controller = null, $module = null, array $params = null): eine andere Aktion durchführen. Bei Aufruf von preDispatch() wird die aktuell angeforderte Aktion zugunsten der neuen Aktion übersprungen. Andernfalls wird nach der Verarbeitung der aktuellen Aktion die in _forward() angeforderte Aktion ausgeführt.
  • _redirect($url, array $options = array()): umleiten zu einem anderen Ort. Diese Methode verwendet eine URL und optionale Optionen. Nach Standard führt es eine HTTP 302-Weiterleitung durch.

Read more um es besser zu verstehen.

+1

Er erwähnte Redirect, Forward und Set Render-Ansicht – encodes

+0

@encodes und ich antwortete ihm über Redirect und foward. Er kann davon ausgehen. –

0

_redirect erstellt eine komplett neue http-Anfrage, wobei _forward einfach die Anfrage weiterleitet. Ich habe das bei der Einstellung einer Variablen in zend_registry bemerkt, nun, das klingt vielleicht ein wenig außerhalb der Spur, aber wenn Sie _request verwenden, werden alle Request-Variablen und Header und Registry-Variablen komplett zurückgesetzt, im Fall von _forward leitet es einfach all diese Dinge weiter. Dies ist so, als ob Sie zuvor Informationen zusammen mit einigen weiteren Informationen im Fall von _forward zur Verfügung gestellt haben könnten.

Gut für setViewRenderer Ich mag diese Idee wirklich, ich meine, das ist so etwas wie Abhängigkeitsinjektion. Sie brauchen nicht unbedingt eine Standardansicht, Sie können eine neue Ansicht für die angegebene Aktion bereitstellen. Ich denke, dass Sie die beste Antwort bekommen würden, wenn Sie in this schauen.

0

_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... 
     } 

    } 
Verwandte Themen