可能重复:
Zend Framework: Controller Plugins vs Action Helpers前控制器插件和动作助手之间的区别是什么?
我知道其中的差别是什么技术,以及如何注册一个前端控制器插件/动作助手,但如果有人有更多这将真正帮助我在Zend框架中的经验可以解释为什么这两种不同的用例(例子会很棒)。
我还是要学习很多与Zend框架的工作时,我想这可能使事情变得更加容易,当我知道时使用的动作助手而不是一个前端控制器插件,反之亦然。
谢谢!
可能重复:
Zend Framework: Controller Plugins vs Action Helpers前控制器插件和动作助手之间的区别是什么?
我知道其中的差别是什么技术,以及如何注册一个前端控制器插件/动作助手,但如果有人有更多这将真正帮助我在Zend框架中的经验可以解释为什么这两种不同的用例(例子会很棒)。
我还是要学习很多与Zend框架的工作时,我想这可能使事情变得更加容易,当我知道时使用的动作助手而不是一个前端控制器插件,反之亦然。
谢谢!
前端控制器插件执行用于每个请求,在MVC周期特定阶段。您可以使用它来执行工作,如检查用户是否已通过身份验证或将请求记录到数据库以进行分析。
控制器动作助手还可以执行在MVC周期的不同阶段,尽管这不是强制性的。插件和动作助手之间的主要区别在于你的控制器可以与动作助手交互以改变他们的行为,或者使用一些按需功能。
插件通常更适合总是需要发生的事情,而动作助手对偶尔的任务很有用,例如发送JSON响应。
的控制器/帮手挂钩一个例子:
你有一个动作助手来检查在preDispatch用户是否登录,如果没有,问到登录的用户在登录控制器,你想要的。这个规则的例外,否则你将无限循环。在登录控制器的init方法,你可以做到以下几点,因为在init()被调用之前preDispatch:
public function init() {
$this->_helper->myHelper->setAuthenticationRequired(false);
}
这将设置一个布尔的助手跳过认证检查。
一个伟大的ressource是这样的UML图:http://www.kitpages.fr/cms/site/tutoriaux/sequence_globale.jpg
你可以看到Plugins
和调用,那么Helpers
,和黄色区域是调度循环。
不要忘了Helpers
挂钩(#17和#22)不会被触发如果助手没有被调用/使用,这是伟大的,可以节省您的时间,未使用的过程中不会需要初始化。
我主要使用:
Plugins
重逻辑所需项目范围(如身份认证,ACL,...),Helpers
对于大多数特定任务靠近action
(如在许多动作