如何从ZF中的任何操作中调用多个控制器动作?
我有一个控制器操作,我希望它在任何操作后执行。我已经写了一个动作助手用这种方法:如何从ZF中的任何操作中调用多个控制器动作?
public function postDispatch(){
$actionstack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
$actionstack->direct('myaction', 'mycontroller');
}
但它似乎停留在循环,有什么错我的代码?
您可以创建一个插件,例如:
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');
}
}
所以,把你想要的操作在这个插件和这些aciotns将被执行毕竟。
会发生什么是在mycontroller-> myaction被调度之后再次调用postDispatch,因此它会一次又一次地调用mycontroller-> myaction。
您可以使用ActionStack
动作助手,或干脆把这种方法的逻辑在postDispatch()
+ 1将逻辑移至助手,问题就会解决。 – 2010-08-06 15:12:16
可以给我一个示例代码请。我不想在我的行动中使用行动助手。因为这样我必须在每一个控制器动作中写下它。 – 2010-08-06 17:31:43
不,您不必在每个控制器操作中写入它,只能在'preDispatch()'中写入。你也可以编写一个Controller插件。 – racetrack 2010-08-06 20:13:03
那么,我该如何解决这个问题? – 2010-08-06 11:28:10