Php 如何在多个控制器之间共享对象(例如Zend_Auth实例)

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()) {

我的应用程序在Zend Framework 1中。我正在使用Zend_Auth管理会话。下面是我如何检查IndexController类中的身份验证:

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”
(添加我的库)不,我没有。第一次创建新名称空间。现在可以用了,谢谢