Php 如何在多个控制器之间共享对象(例如Zend_Auth实例)
我的应用程序在Zend Framework 1中。我正在使用Zend_Auth管理会话。下面是我如何检查IndexController类中的身份验证:Php 如何在多个控制器之间共享对象(例如Zend_Auth实例),php,zend-framework,Php,Zend Framework,我的应用程序在Zend Framework 1中。我正在使用Zend_Auth管理会话。下面是我如何检查IndexController类中的身份验证: class IndexController extends Zend_Controller_Action { public function init() { $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) {
class IndexController extends Zend_Controller_Action
{
public function init()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
public function indexAction()
{
}
}
基本上,它只是将user的view变量设置为auth对象中的任何内容。在我的视图中,我可以检查用户变量是否已设置并正确操作(例如显示“Welcome Tom!”和注销链接)
但是,此功能在我的其他控制器中尚不可用。与其在每个init()方法中重复相同的代码,我如何才能做到这一点?我不太确定该把代码放在哪里
更新:
我尝试在引导文件中执行类似的操作:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
}
…但我得到以下错误:
注意:间接修改重载属性Bootstrap::$view在第9行的/var/www/budgetz/application/Bootstrap.php中无效警告:从第9行的/var/www/budgetz/application/Bootstrap.php中的空值创建默认对象
您可以使用从Zend\u Controller\u Action
继承的抽象类,如下所示:
abstract Class Yourlibrary_Controller_ControllerAbstract extends Zend_Controller_Action
{
public function preDispatch()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
}
而您的控制器继承
Yourlibrary\u Controller\u ControllerAbstract
而不是Zend\u Controller\u Action
preDispatch()函数是否自动运行?有点像我示例中的init()?是的。对于控制器,方法的顺序是:Init()->preDispatch()->Action()->postDispatch().Hi。抱歉,也许我不太了解自动加载器的工作原理-我在ProjectDir/library/My/Controller/文件夹中创建了一个名为ControllerAbstract.php的文件,其中包含一个名为My_Controller\u ControllerAbstract的类。但是,我得到一个错误,说找不到类。我把它放错地方了吗?好像是对的。让你在你的application.ini中添加autoloadernamespace[]=“My”
(添加我的库)不,我没有。第一次创建新名称空间。现在可以用了,谢谢