在我的Zend框架项目中,我想检查是否设置了cookie。如果是这种情况,我想使用cookie内容登录用户。
因为在调用任何控制器之前我必须自动登录,所以我试着把它放在Bootstrap中。如果用户信息有效,我想检查数据库。不幸的是,此时尚未初始化默认数据库适配器。
所以我的问题如下:在调用任何控制器并完成所有初始化/引导之后,我应该在哪里放置应该执行的东西?
答案 0 :(得分:2)
我对Zend Framework没有很好的体验,但我认为您应该为GenericController创建一个自定义通用控制器,它扩展Zend_Controller_Action并将您的代码放在preDispatch()函数中。然后,所有控制器都将成为自定义控制器的子类,例如:
class GenericController extends Zend_Controller_Action{
function preDispatch(){
parent::preDispatch();
// put your code here
}
}
class FooController extends GenericController{
...
}
答案 1 :(得分:0)
使用方法:
init()
// and
preDispatch()
在你的类中实现它们,init在创建时运行,predispatch在你的动作方法之前运行iirc
在我上面链接的那个页面上说明了
注意:init()与preDispatch()的使用 在上一节中,我们介绍了init()方法,在本节中介绍了preDispatch()方法。它们之间有什么区别,你会采取什么行动? init()方法主要用于扩展构造函数。通常,构造函数应该只设置对象状态,而不是执行太多逻辑。这可能包括初始化控制器中使用的资源(例如模型,配置对象等),或分配从前端控制器,引导程序或注册表检索的值。 preDispatch()方法还可以用于设置对象或环境(例如,视图,动作助手等)状态,但其主要目的是决定是否应该调度所请求的动作。如果没有,那么你应该_forward()到另一个动作,或抛出异常。 注意:从init()执行时,_forward()实际上无法正常工作,这是两种方法意图的形式化。