2

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

由于我必须在调用任何控制器之前执行此自动登录,因此我尝试将其放入 Bootstrap。如果用户信息有效,我想检查数据库。不幸的是,此时默认数据库适配器尚未初始化。

所以我的问题如下:在调用任何控制器之前以及在所有初始化/引导的东西完成之后,我应该把那些应该执行的东西放在哪里?

4

2 回答 2

3

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

class GenericController extends Zend_Controller_Action{
   function preDispatch(){
      parent::preDispatch();
      // put your code here
   }
}
class FooController extends GenericController{
...
}
于 2010-11-25T22:55:39.130 回答
0

使用方法:

init()
// and
preDispatch()

在您的类中实现它们,init 在创建时运行,predispatch 在您的操作方法 iirc 之前运行

api

在我上面链接的那个页面上,它指出

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

于 2010-11-25T22:53:28.483 回答