我知道技术上的区别是什么,以及如何注册前端控制器插件/动作帮助器,但如果有更多zend框架经验的人能够解释两者的不同用例,那将会对我有所帮助(例如很棒)。
在使用zend框架时我仍然需要学习很多东西,我想当我知道何时使用动作助手而不是前端控制器插件时,它可以使事情变得更容易,反之亦然。
谢谢!
答案 0 :(得分:4)
在MVC周期的特定阶段,为每个请求执行前端控制器插件。您可以使用它来执行诸如检查用户是否经过身份验证或将请求记录到数据库以进行分析等工作。
控制器动作助手也可以在MVC周期的不同阶段执行,但这不是强制性的。插件和操作助手之间的主要区别在于,您的控制器可以与操作助手交互以更改其行为,或使用某些按需功能。
对于总是需要发生的事情,插件通常更好,而动作助手对于偶尔的任务很有用,比如发送JSON响应。
控制器/辅助钩子的一个例子:
您有一个操作助手,可以在preDispatch中检查用户是否已登录,如果没有,则要求用户登录。在登录控制器中,您希望此规则例外,或者您将无限循环。在登录控制器的init方法中,您可以执行以下操作,因为在preDispatch之前调用init():
public function init() {
$this->_helper->myHelper->setAuthenticationRequired(false);
}
这会在帮助程序中设置一个布尔值,以跳过身份验证检查。
答案 1 :(得分:2)
这个UML图是一个很好的资源:http://www.kitpages.fr/cms/site/tutoriaux/sequence_globale.jpg
您可以看到对Plugins
然后Helpers
的调用,黄色区域是调度循环。
如果没有调用/使用帮助程序,请不要忘记Helpers
挂钩(#17和#22)将不会被触发,这很好,可以为您节省未使用过程的时间不需要初始化。
我主要使用:
Plugins
需要重要的逻辑项目范围(如Authentification,Acl,...),Helpers
对于大多数特定任务更接近action
(如排序,过滤,分页,json编码,pdf下载)避免重复代码< / strong>在许多行动中