首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对模型使用Zend_Autoloader

对模型使用Zend_Autoloader
EN

Stack Overflow用户
提问于 2009-08-11 19:13:34
回答 3查看 5.8K关注 0票数 2

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

application.ini

代码语言:javascript
复制
# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"

Bootstrap.php

代码语言:javascript
复制
   /**
     * 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;
    } 

因此,当我将一个Model放在/Models/User.php中时

代码语言:javascript
复制
class Sl_Model_User{}

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

代码语言:javascript
复制
class Dao_UserDB{}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-11 19:38:14

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

“资源自动加载器旨在管理遵循Zend Framework编码标准准则的命名空间库代码,但在类名和目录结构之间没有1:1的映射。它们的主要目的是促进自动加载应用程序资源代码,如应用程序特定的模型、窗体和ACL。

资源自动加载器在实例化时向自动加载器注册,并与其关联的命名空间注册。这使您可以轻松地将代码命名为特定目录中的空间,同时仍然可以获得自动加载的好处。“

代码语言:javascript
复制
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',

));

代码语言:javascript
复制
$resourceLoader->addResourceTypes(array(
'acl' => array(
    'path'      => 'acls/',
    'namespace' => 'Acl',
),
'form' => array(
    'path'      => 'forms/',
    'namespace' => 'Form',
),
'model' => array(
    'path'      => 'models/',
),

));

在您的引导程序文件中尝试执行以下操作:

代码语言:javascript
复制
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'
        )
    ));
}
票数 7
EN

Stack Overflow用户

发布于 2009-08-11 19:42:20

取决于您当前的设置

ClassFile: /Models/Dao/UserDB.php

ClassName:类Dao_UserDB{}

应该是:

代码语言:javascript
复制
$autoloader = new Zend_Application_Module_Autoloader(array(
    'namespace' => 'Dao_',
    'basePath'  => APPLICATION_ROOT.'/Models/Dao/',
));

但您也可以将类命名为: S1_Dao_UserDB(),这应该无需更改即可工作。

票数 1
EN

Stack Overflow用户

发布于 2012-05-17 19:46:08

要为自定义模型(在自定义库目录中)定义自动加载器规则,请执行以下操作:

代码语言:javascript
复制
|-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中

代码语言:javascript
复制
/**
 * 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')
        ),
    );
}

我花了一段时间才弄明白,希望能节省一些人的时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1262358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档