2010-11-25 1 views
1

サイトがメンテナンスに設定されているかどうかを検出しているコントローラープラグインがあります。メンテナンスコントローラーに_forwardして 'sorry ...'メッセージを表示します。コントローラープラグインでZend _forward

リダイレクトを使用したくない場合は、ユーザーの現在のURLが変更されますが、_forwardはZend_Controller_Actionの保護されたメソッドなので、コンテキストから呼び出すことはできません。どうすればよいですか?

答えて

6

:あなたのコントローラ(複数可)を使用すると、アクションのような$this->_forward('maintenance-action');

何か、あなたの保守作業ではありません、あなたのサイトはメンテナンスモードであると言うフラグをチェックすることができinit()方法でプラグインのメソッドpreDispatchが呼び出された場合、リクエストはディスパッチされません。したがって、要求に応じてコントローラとアクションを設定するだけで、「転送」することができます。

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

私はその仕組みが好きです。なぜ私はそれを考えなかったのですか? ;) –

+1

素敵な考え、ありがとう – Ashley

0

プラグインは_forward()を正しく実行できません。

// .. 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'); 
    } 
} 
関連する問題