2010-11-25 4 views
1

J'ai un plugin de contrôleur qui détecte si le site a été mis en maintenance, si c'est le cas, je veux qu'il envoie le message 'sorry ...' au contrôleur de maintenance.zend _forward dans le plugin du contrôleur

Je ne souhaite pas utiliser de redirection, car cela modifiera l'URL actuelle de l'utilisateur, mais _forward est une méthode protégée Zend_Controller_Action qui ne peut donc pas être appelée hors contexte, comment faire?

Répondre

6

Lorsque la méthode preDispatch de votre plugin est appelée, la requête n'est pas envoyée. Donc, vous pouvez "avancer" juste en réglant le contrôleur et l'action sur la demande:

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

J'aime la façon dont cela fonctionne. Pourquoi n'y ai-je pas pensé? ;) –

+1

Belle réflexion, merci – Ashley

0

Puisque le plugin ne peut pas _forward() correctement; Dans votre contrôleur (s) méthode init() vous pouvez vérifier un drapeau qui dit que votre site est en mode maintenance ET l'action n'est pas votre action de maintenance puis $this->_forward('maintenance-action');

Quelque chose comme:

// .. 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'); 
    } 
} 
Questions connexes