2

有人知道如何使用“新”Zend Autoloader 来加载模型吗?目前我的配置如下所示:

应用程序.ini

# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"

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

并创建一个新对象,一切都像设计的那样工作。但是我如何使用 Autoloader 加载放置在 /Models/Dao/UserDB.php 中的模型?

class Dao_UserDB{}
4

3 回答 3

7

检查 Resource_Autoloader 上的文档(其目的是加载位于模型目录或其他位置的资源 - 即 /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',

));

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

));

在你的 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'
        )
    ));
}
于 2009-08-11T19:38:13.877 回答
1

取决于您当前的设置

类文件:/Models/Dao/UserDB.php

类名:类 Dao_UserDB{}

应该:

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

但是您也可以将类命名为:S1_Dao_UserDB() 这应该可以在不改变的情况下工作。

于 2009-08-11T19:42:19.673 回答
0

为自定义模型(在自定义库目录中)定义自动加载器规则,例如:

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

花了我一段时间才弄清楚,希望它能节省别人的时间。

于 2012-05-17T11:46:07.617 回答