如何在基于 Zend Framework 的应用程序中使用应用程序引导程序中模块中的模型类



我正在开发一个带有一些模块的Zend Framework MVC应用程序,例如User模块。有一个模型类名"Users_Model_User"可用于任何模块/控制器操作。但是我需要在应用程序 Bootstrap 类中使用该模型的实例,但我得到了一个例外:

致命错误:在/my/path/中找不到类"Users_Model_User"...

我为每个模块都有一个引导类:

class Users_Bootstrap extends Zend_Application_Module_Bootstrap {
    protected function _initAutoloader() {
        $autoloader = new Zend_Application_Module_Autoloader(array(
                    'namespace' => 'Users_',
                    'basePath' => APPLICATION_PATH . '/modules/users'
                ));
        return $autoloader;
    }
}

正如我所说,这些模块工作得很好(接收请求、处理和返回响应)。我认为这工作正常,因为模块引导类负责加载默认模块资源,如模型类。但是主要的 Bootstrap 类似乎无法访问"用户"模块模型类。

Users_Bootstrap

应用程序引导程序之后执行,这意味着您的 _initAutoloader() 方法尚未在应用程序引导程序中执行。

解决方案可能是将代码从_initAutoloader()移动到主引导程序。这将解决您的问题!你也可以指你的主引导程序到你的模块引导程序的代码段,这对我来说甚至更有意义。请注意,所有模块引导程序始终独立于当前请求的模块进行调用。

另外,让我与您分享这篇关于采埃孚自举过程的文章,希望它对您有所帮助;)

你可以试试(不确定它会起作用)

protected function __initSomething()
{
   $this->bootstrap('autoload');
   $model = new Users_Model_User();
   ...
}

我不认为引导程序是执行 MySQL 查询的好地方,您应该使用Zend_Controller_Plugin_Abstract,这样资源就会启动并且引导程序自动加载正在工作(我自己正在使用插件进行查询并检查权限......

最新更新