Zend框架:控制器插件 vs 动作助手

26

有人可以给出一些控制器插件和动作助手(Controller Plugins and Action Helpers)之间的区别的提示和/或示例吗?是否存在特定任务可以使用其中一种而不是另一种?对我来说,它们看起来几乎一样,我经常很难决定何时使用什么......它们之间有任何重大差异吗?

5个回答

29

控制器插件可以钩入路由过程中任何控制器的任何阶段(preDispatch postDispatch, routeStartup, routeShutdown),这使它们非常适合提供像ACL强制执行这样的幕后功能。

Action Helpers是可重复使用但可选的部分,您的控制器可能需要访问(重定向器、flashMessenger等)。

因此,如果您正在创建一个始终需要执行自身的可重用代码片段,则使用控制器插件,否则您可能需要使用操作助手。


8
注意,动作控制器也可以执行自己,因为它们具有 preDispatch() 和 postDispatch() 钩子。ActionHelperBroker 用于控制这一过程。 - Rob Allen

14
你可以这样想:
  • 操作助手用于向控制器添加方法。
  • 控制器插件用于向控制器添加路由/调度逻辑。
所以要问自己,我是否有一个希望能够从控制器中的所有操作调用的方法?或者我是否需要向路由/调度过程添加逻辑。
你还可以查看内置的操作助手

6
一个图片可以说明插件和操作助手之间的区别:ZF Sequence Flow

2

动作助手还可以访问正在执行的实际控制器对象。控制器插件只能访问FrontController,因此仅限于控制器和操作名称。

使用哪种取决于您需要的上下文。例如,如果您需要访问附加到控制器的视图对象,则需要使用Action Helper。


0
还要注意,在前端控制器的生命周期过程中,插件比操作助手先获得控制权(或被调用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接