使用Zend_Autoloader适用机型(Use Zend_Autoloader for Mode

2019-09-23 03:15发布

是否有人知道如何使用“新”的Zend自动加载到负荷模型? 在此刻我的配置是这样的:

的application.ini

# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"

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

所以,当我放在/Models/User.php与模型

class Sl_Model_User{}

并创建一个新的对象,一切就像设计。 但是,如何使用磁带自动加载机加载放置在/Models/Dao/UserDB.php模型?

class Dao_UserDB{}

Answer 1:

检查的Resource_Autoloader的文档(其目的是加载驻留在车型目录或其他地方的资源 - 即在/库文件夹外)。

“资源自动加载的目的是管理遵循的Zend Framework编码标准的指南命名空间中的库代码,但没有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',

));

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

));

在你的自举文件试试这个:

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'
        )
    ));
}


Answer 2:

根据您当前的设置

ClassFile的:/Models/Dao/UserDB.php

产品类别:类Dao_UserDB {}

应该:

$autoloader = new Zend_Application_Module_Autoloader(array(
    'namespace' => 'Dao_',
    'basePath'  => APPLICATION_ROOT.'/Models/Dao/',
));

但你也可以命名类:S1_Dao_UserDB()这个应该不会改变。



Answer 3:

要定义像定制机型自动加载规则(在自定义库目录):

|-application
|-library
  |-Foo
    |-Models
      |-Bar.php (holds Foo_Model_Bar class - mind no 's' in class name)
    |-Forms 
      |-Bar.php (holds Foo_Form_Bar class - mind no 's' in class name)
  |-Zend
|-public
|-test

你应该在你bootstrap.php中添加此

/**
 * Enable loading custom  classes
 */
public function _initAutoloaders()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => APPLICATION_PATH . '/../library/Foo',
        'namespace' => 'Foo_'
    ));

    $resourceLoader->addResourceTypes(array(
        'foomodels' => array(
            'namespace' => 'Model_',
            'path' => 'Models')
        ),
        'fooforms' => array(
            'namespace' => 'Form_',
            'path' => 'Forms')
        ),
    );
}

我花了一段时间才能弄清楚,希望这样可以节省时间某人。



文章来源: Use Zend_Autoloader for Models