質問

誰かがモデルをロードするために「新」の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{}
役に立ちましたか?

解決

(その目的は、モデルのディレクトリまたは他の場所に存在するリソースをロードすることである - /ライブラリフォルダの外すなわち)をResource_Autoloaderのドキュメントをチェックします。

「リソース・オートローダは、標準のコーディングガイドライン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'
        )
    ));
}

他のヒント

現在の設定に応じて

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

クラス名: クラスDao_UserDB {}

である必要があります:

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

しかし、あなたはまた、クラスに名前を付けることができます: S1_Dao_UserDB()これは変更せずに動作するはずです。

(カスタムライブラリのディレクトリにある)カスタムモデルのためのオートローダのルールを定義したい:

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

、それを把握するために私にしばらく時間がかかったことが誰かの時間を節約できます願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top