Php Zend:在执行控制器之前执行某些操作
在我的Zend framework项目中,我想检查是否设置了cookie。如果是这种情况,我希望使用cookie内容登录用户 由于我必须在调用任何控制器之前进行自动登录,所以我尝试将其放入引导程序中。在那里,我想检查数据库中的用户信息是否有效。不幸的是,此时默认数据库适配器尚未初始化 所以我的问题是:在调用任何控制器之前,以及在所有初始化/引导工作完成之后,我应该将这些应该执行的工作放在哪里 使用以下方法:Php Zend:在执行控制器之前执行某些操作,php,zend-framework,controllers,bootstrapping,Php,Zend Framework,Controllers,Bootstrapping,在我的Zend framework项目中,我想检查是否设置了cookie。如果是这种情况,我希望使用cookie内容登录用户 由于我必须在调用任何控制器之前进行自动登录,所以我尝试将其放入引导程序中。在那里,我想检查数据库中的用户信息是否有效。不幸的是,此时默认数据库适配器尚未初始化 所以我的问题是:在调用任何控制器之前,以及在所有初始化/引导工作完成之后,我应该将这些应该执行的工作放在哪里 使用以下方法: init() // and preDispatch() 在类中实现它们,init在创建
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并不是最简单的。虽然你可以在引导中加载数据库,然后进行身份验证。太好了,这正是我想要的!更好的方法:使用。继承控制器会使调试和配置变得更加困难。