Php Zend:在执行控制器之前执行某些操作

Php Zend:在执行控制器之前执行某些操作,php,zend-framework,controllers,bootstrapping,Php,Zend Framework,Controllers,Bootstrapping,在我的Zend framework项目中,我想检查是否设置了cookie。如果是这种情况,我希望使用cookie内容登录用户 由于我必须在调用任何控制器之前进行自动登录,所以我尝试将其放入引导程序中。在那里,我想检查数据库中的用户信息是否有效。不幸的是,此时默认数据库适配器尚未初始化 所以我的问题是:在调用任何控制器之前,以及在所有初始化/引导工作完成之后,我应该将这些应该执行的工作放在哪里 使用以下方法: init() // and preDispatch() 在类中实现它们,init在创建

在我的Zend framework项目中,我想检查是否设置了cookie。如果是这种情况,我希望使用cookie内容登录用户

由于我必须在调用任何控制器之前进行自动登录,所以我尝试将其放入引导程序中。在那里,我想检查数据库中的用户信息是否有效。不幸的是,此时默认数据库适配器尚未初始化

所以我的问题是:在调用任何控制器之前,以及在所有初始化/引导工作完成之后,我应该将这些应该执行的工作放在哪里

使用以下方法:

init()
// and
preDispatch()
在类中实现它们,init在创建时运行,predispatch在操作方法iirc之前运行

我在上面链接的那一页上写着

注意:init()与preDispatch()的用法 在上一节中,我们介绍了init()方法,在本节中介绍了preDispatch()方法。它们之间的区别是什么,在每种情况下你会采取什么行动? init()方法主要用于扩展构造函数。通常,构造函数应该只设置对象状态,而不执行太多逻辑。这可能包括初始化控制器中使用的资源(如模型、配置对象等),或分配从前端控制器、引导或注册表检索到的值。 preDispatch()方法也可用于设置对象或环境(例如,视图、操作助手等)状态,但其主要目的是决定是否应调度请求的操作。如果没有,则应_forward()转到另一个操作,或引发异常。 注意:_forward()从init()执行时实际上无法正常工作,这是两个方法意图的形式化


我对Zend Framework没有很好的经验,但我认为您应该创建一个自定义的通用控制器,例如GenericController,它扩展Zend_controller_操作,并将代码放入preDispatch()函数中。然后,所有控制器都将成为自定义控制器的子类,例如:

class GenericController extends Zend_Controller_Action{
   function preDispatch(){
      parent::preDispatch();
      // put your code here
   }
}
class FooController extends GenericController{
...
}

但是我想在调用任何控制器之前执行我的代码。我想在调用Controller1之前登录用户,但也要在调用Controller2之前。@ralle每次请求都会调用某种控制器。您必须将它们登录到每个控制器上,即使您按照另一个答案中的建议进行了扩展,您仍将使用这些方法。没有(不编辑Zend)全局位置(除了引导)来执行此操作。就像你说的,因为它是用户身份验证,所以在引导过程中输入int并不是最简单的。虽然你可以在引导中加载数据库,然后进行身份验证。太好了,这正是我想要的!更好的方法:使用。继承控制器会使调试和配置变得更加困难。