2010-12-02 7 views
2

がここにドキュメントのセクションZend_Application_Resource_Modules読む:あなたは、あなたの設定ファイルのプレフィックスまたはサブセクションとしてモジュール名を使用して、モジュール固有の設定を指定することができますZend Frameworkに 'モジュール固有の設定'を使用させるにはどうすればよいですか?

http://framework.zend.com/manual/1.10/en/zend.application.available-resources.html

を私はこれに気づきました。これを使用して

:これは良いアイデアである私に

[production] 
    news.resources.db.adapter = "pdo_mysql" 
    news.resources.db.params.host = "localhost" 
    news.resources.db.params.username = "webuser" 
    news.resources.db.params.password = "XXXXXXX" 
    news.resources.db.params.dbname = "news" 

。しかし、私がこれらのプレフィックスを自分のモジュール固有のものに加えるだけでは何も変わりません。

私の質問は、これらのモジュール固有のプレフィックスを実際に使用するようにZend Frameworkに指示する方法です。

+1

をちょうどバット、私はために*非常に*紛らわしいものを作るために起こっているように、これが聞こえるように、モジュール固有の設定を使用することをお勧めしませんアプリケーションを維持するために来る次の男。それでも、私は間違っているかもしれないので、これを投票しました。 – karim79

+1

こんにちはダリル、私はこの記事を発見した、それは役立つかもしれないhttp://www.amazium.com/blog/zend-framework-module-specific-config – tawfekov

答えて

4

私はZendで次のモジュールの実装を使用します。これにより、「モジュール固有の」構成を使用することができます。

application/config/config.ini 
----------------------------- 
[production] 
resources.modules[] = 

このようにすると、モジュールブートストラップリソースプラグインを使用することをZend_Applicationに伝えます。 Modulesプラグインは、デフォルトのモジュールを除いて、各モジュールに別々のブートストラップクラスをロードします。したがって、2番目のモジュール用に新しいブートストラップクラスを作成する必要があります。

application/modules/news/Bootstrap.php 
----------------------------- 
class News_Bootstrap extends Zend_Application_Module_Bootstrap { 

    //--------------------------------------- 
    // Automatically load our resources 
    // 
    // NOTE: You don't have to add this, its 
    //  just and example to show that you 
    //  can customize the bootstrap 
    //  process just for this module. 
    public function _initModuleResourceAutoloader(){ 

     $this->getResourceLoader()->addResourceTypes(array(
     'modelResource' => array(
      'path' => 'models/resources', 
      'namespace' => 'Resource' 
     ) 
    )); 
    } 
} 

この "News_Bootstrap"クラスは、ブートストラッププロセス中にロードされ、実行されるようになりました。

モジュールリソースプラグインがクラスを見つける必要があるため、このファイルの命名規則は重要です。 で、ファイル名はBootstrap.phpである必要があります。

最後に、メインブートストラップと同様に、Zend_Application_Bootstrap_BootstrapではなくZend_Application_Module_Bootstrapをサブクラス化していることがわかります。今

は、あなたのモジュール固有の設定作業をする必要があります:

[production] 
news.resources.db.adapter = "pdo_mysql" 
news.resources.db.params.host = "localhost" 
news.resources.db.params.username = "webuser" 
news.resources.db.params.password = "XXXXXXX" 
news.resources.db.params.dbname = "news" 
+0

あなたの答えをありがとう。これは、ドキュメントで言及されているモジュール固有のプレフィックスを見つける前に、まずやろうとしたことです。上記(通常の方法)は、アクティブなモジュールに関係なく、存在するすべてのモジュールのすべてのブートストラップですべての '_init *()'メソッドを実行します。これいらない。 –

+0

Darryl、おそらく、どのモジュールがアクティブであるかを検出し、フラグを設定することができます。その後、他のブートストラップのすべての_init *()メソッドにフラグをチェックさせて、コードの実行を続行するかどうかを決定します。ベスト –

+0

何かを覚えておいてください:私は通常、モジュール全体とリソースを再利用します。たとえば、PRとマーケティングチームがCMS経由で記事を追加/編集できる「ニュース」モジュールがあるとします。これらの記事をホームページに表示したかったとします。デフォルトモジュールのニュースモジュールのモデルやリソースを再利用します。これを行うには、すべての_init *()メソッドを実行するためにBootstrapプロセスが必要です。最高 –

関連する問題