对于 的实例,首先调用 。此处有请求和响应对象,因此可以使用请求中的信息筛选请求或进行一些准备。preDispatch()
Zend_Controller_Plugin_Abstract
init()
的 next 作为构造函数的一部分调用。它可以帮助您初始化控制器,而无需重写和重复构造函数 () 的签名。Zend_Controller_Action
Zend_Controller_Action::__contruct()
此处调用控制器的方法。您可以调用以跳过当前操作 - 不确定是否可以在preDispatch()
$request->setDispatched(false)
init()
然后调用您的操作方法(例如)。在这里,您可以执行正常工作,例如从模型中提取内容并填充视图。viewAction()
所以区别现在应该很清楚:
- 如果你想在所有操作之前执行某些东西 - 把它放在插件中并使用其中一个钩子(除了有和其他的),
preDispatch()
routeStartup
- 如果要在控制器中的每个操作之前 - 或者,
init
preDispatch()
- 如果只是一个动作 - 动作本身。
函数调用之间会发生什么情况?init()
preDispatch()
几乎什么都不执行 - 执行,如果您尚未调用 ,则执行操作。preDispatch()
$request->setDispatched(false)