我的zend应用程序已创建,一切似乎都井然有序,但每次我尝试做类似的事情:
$ accProducts = new Application_Models_AccProductsMapper();
只得到:
警告:include_once(Application / Models / AccProductsMapper.php):无法打开流:第148行/home/blah/blah/blah/Loader.php中没有此类文件或目录
然而,AccProductsMapper.php文件确实存在于这样的目录中,zend app中的目录都是小写的。
我花了很多时间寻找解决这个问题的方法,但根本没有取得好成绩。
bootstrap.php中
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
protected function _initAutoload()
{
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH));
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace(array('App','My_'));
return $moduleLoader;
}
}
答案 0 :(得分:2)
添加到每个模块的标准Zend_Loader_Autoloader_Resource
类在<ModuleNamespace>_Model_
中查找具有类前缀<module-directory>/models
的模型。
对于默认模块,命名空间在配置的appnamespace
属性中定义(默认为Application
)。该目录通常为application
。
总结一下,在application/models
中使用类前缀Application_Model_
创建默认模块模型类,例如
<?php
// application/models/AccProductsMapper.php
class Application_Model_AccProductsMapper
{
// etc
至于你的_initAutoload()
方法,我不知道你在使用该模块加载器做了什么,并建议你根本不需要它。您可以在配置文件中注册PEAR样式名称空间,例如
autoloadernamespaces.App = "App_"
autoloadernamespaces.My = "My_"