我有一个控制器动作,我希望它在任何动作之后执行。我用这个方法写了一个动作助手:
public function postDispatch(){
$actionstack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
$actionstack->direct('myaction', 'mycontroller');
}
但它似乎陷入了一个循环,我的代码有什么问题?
我有一个控制器动作,我希望它在任何动作之后执行。我用这个方法写了一个动作助手:
public function postDispatch(){
$actionstack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
$actionstack->direct('myaction', 'mycontroller');
}
但它似乎陷入了一个循环,我的代码有什么问题?
您可以使用ActionStack
动作助手,也可以简单地将该方法的逻辑放入您的postDispatch()
您可以创建一个插件,例如:
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');
}
}
所以把你想要的动作放在这个插件中,这些动作终究会被执行。
发生的情况是在 mycontroller->myaction 被调度后再次调用 postDispatch,因此它一次又一次地调用 mycontroller->myaction。