使用Zend_Autoloader进行模型

opH*_*AME 2 php zend-framework autoloader

有人知道如何使用"新"Zend Autoloader加载模型吗?在Moment中,我的配置如下所示:

的application.ini

# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"
Run Code Online (Sandbox Code Playgroud)

bootstrap.php中

   /**
     * Start Autoloader
     *
     * @access protected
     * @return Zend_Application_Module_Autoloader
     */
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Sl_',
            'basePath'  => dirname(__FILE__),
        ));

        return $autoloader;
    } 
Run Code Online (Sandbox Code Playgroud)

所以当我在/Models/User.php中放置一个模型时

class Sl_Model_User{}
Run Code Online (Sandbox Code Playgroud)

并创建一个新对象,一切都像设计的一样.但是如何使用Autoloader加载位于/Models/Dao/UserDB.php中的模型?

class Dao_UserDB{}
Run Code Online (Sandbox Code Playgroud)

And*_*eas 7

检查Resource_Autoloader上的文档(其目的是加载驻留在models目录或其他地方的资源 - 即在/ library文件夹之外).

"资源自动加载器旨在管理符合Zend Framework编码标准准则的命名空间库代码,但它们在类名和目录结构之间没有1:1映射.它们的主要目的是促进自动加载应用程序资源代码,例如特定于应用程序的模型,表单和ACL.

资源自动加载程序在实例化时向自动加载器注册,并与它们关联的命名空间一起注册.这使您可以轻松地在特定目录中命名代码,并且仍然可以获得自动加载的好处."

path/to/some/directory/
    acls/
         Site.php
    forms/
        Login.php
    models/
        User.php


$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath'  => 'path/to/some/directory',
'namespace' => 'My',
Run Code Online (Sandbox Code Playgroud)

));

$resourceLoader->addResourceTypes(array(
'acl' => array(
    'path'      => 'acls/',
    'namespace' => 'Acl',
),
'form' => array(
    'path'      => 'forms/',
    'namespace' => 'Form',
),
'model' => array(
    'path'      => 'models/',
),
Run Code Online (Sandbox Code Playgroud)

));

在你的boostrap文件中试试这个:

protected function _initLoaderResource()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => 'your_doc_root' . '/application',
        'namespace' => 'MyNamespace'
    ));
    $resourceLoader->addResourceTypes(array(
        'model' => array(
            'namespace' => 'Model',
            'path'      => 'models'
        )
    ));
}
Run Code Online (Sandbox Code Playgroud)