0

Zend Frameworkを使用してWebサイトを構築していますが、ディスパッチループに問題があります。

通常、Zend FrameworkのURLは次のように作成されます:http://www.domain.com/module/controller/action

私のWebサイトでは、カスタムメソッドによってディスパッチループで解析されるカスタマイズされた動的URLを使用しています。したがって、これらのURLはそれぞれ、解析された後、特定のコントローラーとモジュールの特定のアクションを実行します。

解析されたモジュール、コントローラー、およびアクションに依存するいくつかのタスクを実行する必要があります。問題は、dispatchLoopShutdownが発生したときに、解析されたモジュール、コントローラー、およびアクションしか知ることができないことです。私が実行する必要のあるタスクは、ブラウザに送信される出力に変更を加えるいくつかのCookieを設定します。

ただし、この時点では、ビューはすでにレンダリングされており、dispatchLoopShutdownが発生したときに設定されたCookieは、それに応じて出力を変更しません。

だから、私の質問は...ビューを再びレンダリングするように強制する方法はありますか?または、dispatchLoopShutdownの前に、実行されるモジュール、コントローラー、およびアクションを知る方法はありますか?postDispatchでもこれを達成しようとしましたが、結果は同じです。

私の問題を正しく説明できれば幸いです。

ご協力ありがとうございました。

4

2 に答える 2

0

私も同じ問題を抱えていました。Zend_Controller_Plugin_ActionStack によって解決されました。dispatchLoopShutdown のロジックを実装したアクションをいくつか追加しました。このリンクは役に立ちますhttp://framework.zend.com/manual/1.12/en/zend.controller.plugins.html#zend.controller.plugins.standard.actionstack

于 2015-04-05T15:24:23.123 に答える
0

Zend Framework シーケンスに関する適切なスキーマを次に示します。

コントローラープラグインを使用すると、ディスパッチ前にモジュール、コントローラー、およびアクションを知ることができます。

<?php
class Custom_Controller_Plugin_CheckRoute extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch($request)
    {
        //Get Request
        $controller = $request->controller;
        $action     = $request->action;
        $module     = $request->module; 

        //=> perform actions before dispatch

        //Update the Request
        $request->setModuleName('default')
            ->setControllerName('index')
            ->setActionName('action2');
    }
}
?>
于 2011-02-25T23:04:21.373 に答える