2

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

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

我为每个模块都有一个 Bootstrap 类:

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 类似乎无法访问“用户”模块模型类。

4

2 回答 2

3

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

一个解决方案可能是将您的代码从_initAutoloader()您的主引导程序移动。这将解决您的问题!您也可以将主引导程序中的一段代码指向模块引导程序,这对我来说更有意义。请注意,您的所有模块引导程序总是被调用,独立于当前请求的模块。

另外,让我与您分享这篇关于 ZF 中的引导过程的文章,希望对您有所帮助;)

于 2012-04-18T07:52:44.913 回答
1

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

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

我不认为 bootstrap 是进行 mysql 查询的好地方,你应该使用a Zend_Controller_Plugin_Abstract,这样资源就会启动并且 bootstrap 自动加载正在工作(我自己使用插件来进行查询和检查权限...... )

于 2012-04-18T07:55:22.520 回答