1

我的 zend 应用程序已创建,一切似乎都井然有序,但每次我尝试执行以下操作时:

$accProducts = new Application_Models_AccProductsMapper();

只得到:

警告:include_once(Application/Models/AccProductsMapper.php):无法打开流:第 148 行的 /home/blah/blah/blah/Loader.php 中没有此类文件或目录

但是,AccProductsMapper.php 文件确实存在于这样的目录中,zend 应用程序中的目录都是小写的。

我花了很多时间寻找解决这个问题的方法,但根本没有好的结果。


引导程序.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;
    }
}
4

1 回答 1

2

添加到每个模块的标准Zend_Loader_Autoloader_Resource类查找具有类前缀<ModuleNamespace>_Model_in的模型<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_"
于 2011-10-24T22:37:55.993 回答