2010-03-18 53 views

回答

4

在你的控制器嘗試

public function preDispatch() 
{ 
    if($this->getRequest()->getActionName() === 'actionName') { 
     return; // ignoring preDispatch 
    } 
    // run preDispatch code when not actionName 
} 

任何控制器動作被稱爲MVC中的請求生命週期之前,preDispatch方法被調用。因此,您不能從個別操作中禁用preDispatch。

您可以在您的控制器內創建一個屬性,或者在preDispatch方法中創建一個變量,在該方法中,您可以在不需要執行任何操作的情況下放入操作名稱(不包含Action後綴)。在上面的示例代碼中,您不會針對一個操作名稱而是針對操作名稱列表進行測試,可能會使用in_array。

http://devzone.zend.com/article/11978-Zend-Framework-MVC-Request-Lifecycle

+0

難道我們沒有任何建立與Zend,可能類似於 1.Blockpredispatch()可以在任何方法中添加。或 2.在preDispatch方法本身,我們可以有一個'nopredispatchaction'數組。 現在我正在通過在我的控制器中編寫一個自定義函數來處理這個問題,並在ControllerName&actionName作爲參數的情況下調用predispatch()中的函數。 – user274383 2010-03-19 06:16:07

+0

沒有爲此目的內置的東西。 nopredispatchaction陣列的方法聽起來對我來說完全有效,您當前的方法也是如此。我可能不會將自定義方法放置在控制器中,但可以將其設置爲動作助手,以便您可以在任何控制器中重複使用它。 Action助手可以在preDispatch中調用。 – Gordon 2010-03-19 08:06:34

+0

嗨戈登, 感謝您的答覆。我做了一些研究,發現ZF中沒有任何內置功能。 其次,在actionhelpers上,我沒有把它放在動作助手下,我已經做了,我創建了一個applicationController(Zend_Controller_Action),並從我的應用程序控制器中擴展了我的應用程序控制器的其餘部分。這個應用程序控制器擁有所有我的其他控制器通用的功能。 儘管我對ZF有點新手,但是會在幾天內克服它:) – user274383 2010-03-22 06:39:12