1

プレディスパッチ中にプラグインを呼び出す方法を見つけようとしていますが、最後に呼び出すのに問題があります。

基本的に、アクションメソッドが呼び出される前に、すべてのコントローラーのプレディスパッチの後、これを呼び出す必要があります。

これは可能ですか?

最後に高い値を渡してプラグインを呼び出そうとしましたが、これが間違っていることはわかっています。postDispatch でこれを呼び出すつもりはありません。

 $front->registerPlugin(new Plugin_Acl, 1000);

 class Plugin_Acl extends Zend_Controller_Plugin_Abstract
 {
     public function preDispatch(...)
     {
       // ... DO STUFF before any action method
     }
  }
4

3 に答える 3

1

この標準Zend_Controller_Actionには空の preDispatch()メソッドがありpreDispatch()、すべてのフロントコントローラープラグイン(コントローラーがインスタンス化される前に発生します)で呼び出され、アクションメソッド自体の直前に接続されているすべてのアクションヘルパーで呼び出されます。フローについては、 Zend_Controller_FrontZend_Controller_Dispatcher_Standard、およびZend_Controller_Actiondispatch()のメソッドを参照してください。

したがって、その時点ですべてのコントローラーで何かを実行したい場合は、実行しpreDispatch()たいコードを含むメソッドを使用してベースコントローラーを作成できます。

于 2012-06-22T07:23:07.400 に答える
0

私はdispatchLoopStartup()でそれをやっています

class My_Plugins_Front extends Zend_Controller_Plugin_Abstract {

    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request){

        // Register ACL plugin if is admin controller (for eg.)
        if($request->getControllerName() == 'admin'){
            /**
             * Set up your ACL
             */
        }

        // You can setting variable to see in all view files
        $layout     = Zend_Layout::getMvcInstance();
        $view       = $layout->getView();
        $view->test = 'test';
    }

    public function dispatchLoopShutdown(){}
}
于 2012-06-22T09:29:45.307 に答える
0

predispatch の呼び出しは、私の ACL で機能するようです:

class Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{

    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        parent::preDispatch($request);
        //do some stuff
}

次に、次の行を使用して application.ini でインスタンス化します。

resources.frontController.plugins.acl = "Controller_Plugin_Acl"

これがいくつかの助けになることを願っています...

于 2012-06-22T09:46:22.500 に答える