1

フロントコントローラー用のプラグインがあります。

dispatcherloodstartup メソッドでは問題なく動作しますが、postdispatcher はアクションを呼び出すことができません!

なにが問題ですか?

これは私のプラグインです:

class Places_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract
{

public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request)
    {
        $front = Zend_Controller_Front::getInstance();
        
        if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
                $actionStack = new Zend_Controller_Plugin_ActionStack();
                $front->registerPlugin($actionStack, 97);
            } else {
            $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
        }
        
            $menuAction = clone($request);
            $menuAction->setActionName('menu')->setControllerName('index');
            $actionStack->pushStack($menuAction);
        
    }
     

    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {     $menuAction = clone($request);
        $menuAction->setActionName('toolbar')->setControllerName('index');
    }
}

これは私のブートストラップコードです:

$frontController->registerPlugin(new Places_Controller_Plugin_ActionSetup(), 98);

stackpush を使用する必要がある場合、どの番号が役立ちますか?

4

1 に答える 1

1

初め。これは悪い習慣です。3 つのディスパッチ ラウンドアバウトを実行する必要があります (すべてのプラグインをディスパッチの前後に、コントローラーを前後に、...)- 可能であれば、1 つのフロント コントローラー プラグインに切り替え、適切なレイアウト変数を入力し、パーシャル/ビュー ヘルパーを使用してそれらをレンダリングします。

あなたのコードの問題は、リクエストがすでに postDispatch()isDispatched = trueにあるということです。これは、再度ディスパッチされないことを意味します。オプションで、自分でリクエストを作成することもできます。そしてそれをアクションスタックにプッシュします。

また、リクエストを作成する actionstack メソッドを使用することもでき$this->actionstack($action, $controller, $module, $params)ます;) this$params = $frontController->getRequest()->getParams()または sth のような現在のパラメーターを取得できます。そのように(メソッド名について100%確信が持てません)。

編集:

ツールバーのレンダリングをレイアウトに入れれば問題ありません。変数をビューに割り当てると、レイアウトで使用できるようになります。持っているだけecho $this->render('toolbar.phtml');で、それだけです。レイアウトは最後にレンダリングされるビューであるため、常にすべてのアクションがレンダリングされた後にレンダリングされます。ツールバーの変数が他の変数と衝突しないことを確認してください (何かで変数を修正することをお勧めします - たとえば$this->toolbarUsername;$this->toolbarIsLoggedなど)。

于 2011-05-05T14:00:14.720 に答える