Php 前端控制器插件和动作助手之间有什么区别?

Php 前端控制器插件和动作助手之间有什么区别?,php,zend-framework,Php,Zend Framework,可能重复: 我知道技术上的区别是什么,以及如何注册front controller插件/动作助手,但是如果有人在zend framework方面有更多的经验,可以向我解释这两个插件的不同用例(示例会很好) 在使用zend framework时,我仍然需要学习很多东西,我想如果我知道什么时候使用action helper而不是front controller插件,事情会变得更简单,反之亦然 谢谢 前端控制器插件在MVC周期的特定阶段为每个请求执行。您可以使用它执行诸如检查用户是否经过身份验证或将

可能重复:

我知道技术上的区别是什么,以及如何注册front controller插件/动作助手,但是如果有人在zend framework方面有更多的经验,可以向我解释这两个插件的不同用例(示例会很好)

在使用zend framework时,我仍然需要学习很多东西,我想如果我知道什么时候使用action helper而不是front controller插件,事情会变得更简单,反之亦然


谢谢

前端控制器插件在MVC周期的特定阶段为每个请求执行。您可以使用它执行诸如检查用户是否经过身份验证或将请求记录到数据库以进行分析等工作

控制器操作助手也可以在MVC周期的不同阶段执行,尽管这不是强制性的。插件和动作助手之间的关键区别在于,您的控制器可以与动作助手交互以更改其行为,或者使用一些按需功能

插件通常更适用于总是需要发生的事情,而动作助手则适用于偶尔的任务,如发送JSON响应

控制器/辅助对象挂钩示例:

您有一个操作助手,可以在preDispatch检查用户是否已登录,如果未登录,则要求用户登录。在登录控制器中,您希望此规则有一个例外,否则将无限循环。在登录控制器的init方法中,您可以执行以下操作,因为在preDispatch之前调用init()

public function init() {
   $this->_helper->myHelper->setAuthenticationRequired(false);
}

这将在帮助器中设置一个布尔值以跳过身份验证检查。

一个很好的资源是这个UML图:

您可以看到对
插件的调用,然后是对
助手的调用,黄色区域是调度循环

不要忘记
帮助程序
钩子(#17和#22)不会被触发如果没有调用/使用帮助程序,这很好,可以节省您的时间,因为不需要初始化未使用的进程

我主要使用:

  • 插件
    用于需要大量逻辑的项目范围(如身份验证、Acl等)
  • 助手
    用于大多数特定任务更接近
    操作
    (如排序、筛选、分页、json编码、pdf下载)避免在许多操作中重复代码