我正在开发一个带有一些模块的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
,这样资源就会启动并且引导程序自动加载正在工作(我自己正在使用插件进行查询并检查权限......