2011-07-24 4 views
2

デフォルトの名前空間Application_の下にあるすべてのクラスは、デフォルトで自動読み込みされます。モジュールをさらに作成すると、そのモジュールの下のクラスは自動ロードされません。デフォルトの名前空間 "Application_"のように、余分なモジュールのクラスを自動的に自動ロードする方法は?

私は[] =「EXTRA_」

application.ini

ようautoloaderNamespacesに余分なモジュールの名前空間を設定しようとしたが、余分なモジュールのフォルダ構造は、それを見つけることができません Applicationの内側にあるので、それ。

正しく設定するにはどうすればよいですか?各モジュールのBootstrapクラスで

答えて

0

、新しいmodule resource autloloaderを作成します。

protected function _initResourceAutoloader() 
{ 
    $resourceAutoloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Mymodule', 
     'basePath' => dirname(__FILE__), 
    )); 
} 

その後、あなたはモジュール固有のクラスのために、「標準」フォルダ構造を使用することができます。例えば、Mymodule_Form_Editという名前のフォームは、ファイル内のmodules/mymodule/forms/Edit.php

UPDATE @Xerkusとothersで述べたように

Zend_Application_Module_Bootstrapを拡張するブートストラップモジュールが自動的に登録されますいくつかの標準的な名前空間/パスマッピング、その必要はありませんが存在するだろう手動でZend_Application_Module_Autoloaderをインスタンス化します。

+0

を必要とすることができます」これはapplication.iniから行われます – mrN

+0

そしてあなたのソリューションはどちらも動作していません – mrN

+0

まあ、私の答えにはタイプミスがありました。 –

2

あなたは、インスタンス上でオートローダーを登録application resource modules

モジュールのブートストラップ(Zend_Application_Module_Bootstrapのサブクラスの場合)を使用することができます。
次は、デフォルトではオートローダーに登録されたリソースの配列です:

array(
    'dbtable' => array(
     'namespace' => 'Model_DbTable', 
     'path'  => 'models/DbTable', 
    ), 
    'mappers' => array(
     'namespace' => 'Model_Mapper', 
     'path'  => 'models/mappers', 
    ), 
    'form' => array(
     'namespace' => 'Form', 
     'path'  => 'forms', 
    ), 
    'model' => array(
     'namespace' => 'Model', 
     'path'  => 'models', 
    ), 
    'plugin' => array(
     'namespace' => 'Plugin', 
     'path'  => 'plugins', 
    ), 
    'service' => array(
     'namespace' => 'Service', 
     'path'  => 'services', 
    ), 
    'viewhelper' => array(
     'namespace' => 'View_Helper', 
     'path'  => 'views/helpers', 
    ), 
    'viewfilter' => array(
     'namespace' => 'View_Filter', 
     'path'  => 'views/filters', 
    ), 
) 

あなたはモジュールのブートストラップからオートローダ独自のモジュールのリソースタイプを追加することができます。

//module bootstrap for module foo 
class Foo_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
    function _initMyRes() 
    { 
     $autoloader = $this->getResourceLoader(); 
     $autoloader->addResourceType('myres', 'myres/custom/path', 'My_Res'); 
    } 
} 

最初のパラメータには、リソースタイプの鍵であり、 2番目はモジュール名に関連するパス、3番目はリソースプレフィックスです。 クラスFoo_My_Res_Barは、modules/foo/myres/custom/path/Bar.php

1

から自動ロードされます。名前空間は、独自のライブラリクラス(Zend_など)クラス用です。モジュールは異なるものであり、その意味では名前空間を持たない。

複数のモジュールディレクトリのサポートが必要な場合はapplication.ini構成では、あなたがUPDATEこの

autoloaderNamespaces.My = "My_" 
// these are you library classes 

resources.frontController.moduleDirectory = APPLICATION_LIBRARY "/modules" 
// this is your module directory 

のようなものを持っていますあなたはZF 1.11.1またはこのbugfix

関連する問題