2010-03-17 123 views
26

有人可以提供一些提示和/或示例控制器插件和動作助手是不同的?有沒有可以用一個而不是另一個來完成特定任務的情況?對我而言,他們看起來都差不多,而且我經常無法決定何時使用......有什麼重大區別?Zend框架:控制器插件和動作助手

回答

29

控制器插件可以在路由過程中的任何點(preDispatch postDispatch,routeStartup,routeShutdown)掛接到任何控制器,這使得它們可以提供幕後功能,如ACL強制執行。

動作助手是爲您的控制器可能需要訪問可重複使用的,但可選的段(重定向,flashMessenger)。

所以,如果你正在創建的代碼,總是需要執行,然後自己使用控制器插件可重用的代碼片段,否則你可能要一個動作助手。

+8

只是要注意動作控制器還可以執行自己,因爲他們有preDispatch()方法和執行postDispatch()掛鉤。 ActionHelperBroker用於控制這個。 – 2010-04-11 11:11:17

14

你可以認爲它是這樣的:

  • 動作助手用來方法添加到控制器。
  • 控制器插件用於向控制器添加路由/調度邏輯。

所以問問自己,我有一種方法,我想能夠從我的控制器中的所有操作調用?或者我需要在路由/調度過程中添加邏輯。

您還可能有一個看的Built in Action Helpers

2

動作助手還可以訪問到真實正在執行的實際controlller對象。控制器插件只能訪問FrontController,因此只能訪問控制器和操作名稱。

使用哪種取決於你所需要的內容。例如,如果您需要訪問連接到控制器的視圖對象,則需要一個Action Helper。

6

圖片說明插件和動作助手之間的差:在前端控制器生命週期過程 ZF Sequence Flow

0

還要注意,插件得到控制(或調用)第一比動作助手。