如何从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。

+0

那么,我该如何解决这个问题? – 2010-08-06 11:28:10

您可以使用ActionStack动作助手,或干脆把这种方法的逻辑在postDispatch()

+0

+ 1将逻辑移至助手,问题就会解决。 – 2010-08-06 15:12:16

+0

可以给我一个示例代码请。我不想在我的行动中使用行动助手。因为这样我必须在每一个控制器动作中写下它。 – 2010-08-06 17:31:43

+0

不,您不必在每个控制器操作中写入它,只能在'preDispatch()'中写入。你也可以编写一个Controller插件。 – racetrack 2010-08-06 20:13:03