2010-08-06 58 views
0

我有一個控制器操作,我希望它在任何操作後執行。我已經寫了一個動作助手用這種方法:如何從ZF中的任何操作中調用多個控制器動作?

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

但它似乎停留在循環,有什麼錯我的代碼?

回答

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'); 

    } 
} 

所以,把你想要的操作在這個插件和這些aciotns將被執行畢竟。

0

會發生什麼是在mycontroller-> myaction被調度之後再次調用postDispatch,因此它會一次又一次地調用mycontroller-> myaction。

+0

那麼,我該如何解決這個問題? – 2010-08-06 11:28:10

1

您可以使用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

相關問題