2010-11-25 4 views
1

Ich habe ein Controller-Plugin, das erkennt, wenn die Website auf Wartung eingestellt wurde, wenn es hat, ich will es _forward zum Wartungs-Controller, um die 'sorry ...' Nachricht anzuzeigen.Zend _forward in Controller-Plugin

Ich möchte keine Umleitung verwenden, da dies die aktuelle URL ändert, auf der sich der Benutzer befindet, aber _forward ist eine Zend_Controller_Action geschützte Methode und kann daher nicht außerhalb des Kontextes aufgerufen werden. Wie mache ich das?

Antwort

6

Wenn Die preDispatch Methode Ihres Plugins wird aufgerufen, die Anfrage wird nicht versendet. So können Sie "nur" weiterleiten, indem Sie den Controller und die Aktion auf die Anforderung einstellen:

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    if ($this->isMaintenanceMode()) { 
     $request->setControllerName('error'); 
     $request->setActionName('maintenance'); 
    } 
} 
+0

Ich mag die Art und Weise, die funktioniert. Warum habe ich nicht daran gedacht? ;) –

+1

Schönes Denken, danke – Ashley

0

Da das Plugin nicht _forward() richtig kann; In dem Controller (n) init() Methode können Sie für einen Flag überprüfen, dass Ihre Website sagt im Wartungsmodus ist UND die Aktion nicht Ihre Wartungsaktion ist dann $this->_forward('maintenance-action');

Etwas wie:

// .. in your action controller 
public function init() { 
    $maintenanceMode = checkTheFlagYourPluginSet(); 
    // .. other code removed omitted 
    if ($maintainenceMode && $this->_request->getActionName() != 'maintenance-action') { 
     // return so that nothing else gets executed in the init() 
     return $this->_forward('maintenance-action'); 
    } 
}