2

「新しい」Zend Autoloader を使用してモデルをロードする方法を誰かが知っていますか? 現時点では、私の構成は次のようになります。

アプリケーション.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{}
4

3 に答える 3

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',

));

$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'
        )
    ));
}
于 2009-08-11T19:38:13.877 に答える
1

現在の設定に応じて

クラスファイル: /Models/Dao/UserDB.php

ClassName: クラス 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 に答える