Zend自动加载模型问题

| Zend框架。 我想从bootstrap类中自动将我的模型类加载到models文件夹中。 这些模型实际上不使用任何名称空间(因此,我有Ex。User.php文件的类,名为User,依此类推。)。 如果我正确理解,应该使用Zend_Loader_Autoloader_Resource,然后尝试:
function _initLoaderResource() 
{         
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(                 
    \'basePath\'  => APPLICATION_PATH,//points to the \"application\" path where resides \"models\" folder
    \'namespace\' =>\'\'       
    ));         

    $resourceLoader->addResourceType(\'models\', \'models/\');

} 
并且我收到以下“ Zend_Loader_Exception \”消息:
\'Initial definition of a resource type must include a namespace\' 
我的问题是: 这是自动加载模型的正确方法吗? 我应如何管理不遵循Zend Framework编码标准的资源代码?     
已邀请:
实际上,您可能不想为此使用资源自动加载器,因为(您已经发现)它需要一个名称空间。标准自动加载器(从包含路径加载模型)具有选项
setFallbackAutoloader
,该选项告诉ZF该自动加载器应用于与不匹配另一个名称空间的任何类。因此,您要做的就是确保您的models目录位于include路径上,并将此选项设置为true。 您可能已经在使用标准的自动加载器来加载Zend类,因此您可能需要修改application.ini文件以将模型目录添加到包含路径,然后在application.ini或在您的Bootstrap类中:
protected function _initAutoloader()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->setFallbackAutoloader(true);

    return $autoloader;
}
    
Zend Autoloader使用名称空间来确保您不需要的类上没有使用自动加载过程。因此,您将不得不为类选择一个名称空间。 您可以使用特定于应用程序的名称空间或通用名称空间来启动类。 \'My_ \'或\'App_ \'等名称空间是通用名称,但是例如,如果您的应用程序名称为Job Board,则可以在类文件中使用\'JB_ \'等名称空间。 您还可以编写自己的自动加载器(全新的自动加载器,或通过扩展Zend自动加载器)并将其注册为SPL自动加载器以绕过此过程。 您的类名称不必遵循Zend Framework的命名约定,只需确保它们具有名称空间并在自动加载器中注册该名称空间即可。 在这里,我附上了一段代码,其中注册了一些要自动加载的资源。我有多个模块,每个模块都有一个与该模块名称有关的名称空间。请注意,由于存在许多名称空间,因此我将它们全部注册为一个循环。
    $nameSpaceToPath = array(
                            \'Application\'   => APPLICATION_PATH,
                            \'Base\'          => APPLICATION_PATH . \'/base\',
                            \'Store\'     => APPLICATION_PATH . \'/modules/Store\',
                            \'Payment\'     => APPLICATION_PATH . \'/modules/Payment\',
                            \'Admin\'     => APPLICATION_PATH . \'/modules/Admin\'
                        );

    foreach($nameSpaceToPath as $ns => $path) {
        $autoLoaderResource = new Zend_Loader_Autoloader_Resource(
                            array(
                                \'basePath\' => $path,
                                \'namespace\' => $ns
                            )
                        );
        $autoLoaderResource->addResourceType(\'controller\',\'controllers\',\'Controller\');
        $autoLoaderResource->addResourceType(\'model\',\'models\',\'Model\');
        $autoLoaderResource->addResourceType(\'mapper\',\'models/mappers\',\'Model_Mapper\');
        $autoLoaderResource->addResourceType(\'service\',\'services\',\'Service\');
        // I\'m using _Util_ in the name of my utility classes, I place them in \'utils\' directory
        $autoLoaderResource->addResourceType(\'util\',\'utils\',\'Util\');
        $autoLoaderResource->addResourceType(\'plugin\',\'plugins\',\'Plugin\');
        $autoLoaderResource->addResourceType(\'form\',\'forms\',\'Form\');
        // I\'m using _Exception_ in the name of my module specific exception classes, I place them in \'exceptions\' directory
        $autoLoaderResource->addResourceType(\'exception\',\'exceptions\',\'Exception\');
        $autoLoader->pushAutoloader($autoLoaderResource);
    }
当通过调用定义资源类型时:
$autoLoaderResource->addResourceType(\'service\',\'services\',\'Service\');
您实际上是在告诉Zend Autoloader您有一个\'service \'类型(第一个参数),该类型位于名为''services \'(第二个参数)的目录中,并且您正在使用\'Service \'令牌类名以指定此类型的类。 上面的代码告诉Zend Autoloader在路径“ APPLICATION_PATH / modules / store / services / Core.php \”中搜索Store_Service_Core类。 如您所见,我已经为APPLICATION_PATH路径注册了通用的\'Application \'名称空间。这意味着将从Application_开头的每个类都将从APPLICATION_PATH自动加载。因此,例如,我有一个名为Application_Init的类,它使用一些初始化任务,现在Zend从路径APPLICATION_PATH / Init.php自动加载它。     

要回复问题请先登录注册