Zend Framework从Application / Model /而不是应用程序/模型加载映射器

时间:2011-10-24 21:52:21

标签: zend-framework class frameworks directory mapper

我的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;
    }
}

1 个答案:

答案 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_"