有人可能会提供一些技巧和/或示例,控制器插件和动作助手是如何不同的?是否存在可以用一个而不是另一个完成特定任务的情况?对我来说,他们看起来或多或少都是一样的,我经常无法决定何时使用什么......有什么大不同之处吗?
答案 0 :(得分:29)
控制器插件可以在路由进程中的任何一点挂钩到任何控制器(preDispatch postDispatch,routeStartup,routeShutdown),这使得它们能够提供像ACL强制执行这样的幕后功能。
Action Helpers适用于控制器可能需要访问的可重用但可选的段(重定向器,flashMessenger)。
因此,如果您要创建一个可重复使用的代码片段,始终需要自己执行,那么请使用控制器插件,否则您可能需要一个动作助手。
答案 1 :(得分:14)
你可以这样想:
所以问问自己,我是否有一种方法可以通过控制器中的所有操作调用?或者我是否需要在路由/调度过程中添加逻辑。
您可能还需要查看Built in Action Helpers。
答案 2 :(得分:6)
说明插件和动作助手之间区别的图片: ZF Sequence Flow
答案 3 :(得分:2)
动作助手还可以访问正在执行的实际控制器对象。控制器插件只能访问FrontController,因此只能访问控制器和操作名称。
您使用哪种方法取决于您需要的上下文。例如,如果需要访问连接到控制器的视图对象,则需要一个Action Helper。
答案 4 :(得分:0)
另请注意,在前端控制器生命周期过程中,插件首先获得控件(或调用),而不是操作助手。