【问题标题】:how to call multiple controller action from within any action in ZF?如何从 ZF 的任何操作中调用多个控制器操作?
【发布时间】:2010-08-06 11:13:10
【问题描述】:

我有一个控制器动作,我希望它在任何动作之后执行。我用这个方法写了一个动作助手:

public function postDispatch(){    
    $actionstack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
    $actionstack->direct('myaction', 'mycontroller');
}

但是好像卡在了一个循环中,我的代码有什么问题?

【问题讨论】:

    标签: zend-framework helper


    【解决方案1】:

    您可以创建一个插件,例如:

    class Plugin_Sidebar extends Zend_Controller_Plugin_Abstract {
    
        public function postDispatch(Zend_Controller_Request_Abstract $request)
        {
            if($request->getModuleName() == 'admin')
            {
                return;
            }
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
            if (null === $viewRenderer->view) {
                $viewRenderer->initView();
            }
            $view = $viewRenderer->view;
    
            $yt = new Zend_Gdata_YouTube();
            $view->videos = $yt->getUserUploads('MysteryGuitarMan');
    
        }
    }
    

    所以把你想要的动作放在这个插件里,这些动作终究会被执行。

    【讨论】:

      【解决方案2】:

      您可以使用ActionStack 操作帮助程序,或者简单地将该方法的逻辑放入您的postDispatch()

      【讨论】:

      • + 1 把逻辑移到你的助手,你的问题就解决了。
      • 你能给我一个示例代码吗?我不想在我的操作中使用 actionstack 助手。因为这样我必须在每个控制器动作中写它。
      • 不,您不必在每个控制器操作中都写它,只需在 preDispatch() 中。你也可以写一个Controller插件。
      【解决方案3】:

      发生的情况是,在 mycontroller->myaction 被调度后再次调用 postDispatch,因此它一次又一次地调用 mycontroller->myaction。

      【讨论】:

        猜你喜欢
        • 2021-04-26
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 2023-03-08
        相关资源
        最近更新 更多