2010-12-02 80 views
2

閱讀部分Zend_Application_Resource_Modules在這裏的文檔: http://framework.zend.com/manual/1.10/en/zend.application.available-resources.html如何讓Zend Framework使用'模塊特定'配置?

我注意到了這一點:

您可以使用模塊名作爲您的配置文件的前綴或子部分指定特定模塊的配置。

使用此:

[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框架實際使用這些模塊特定的前綴?

+1

剛剛送走了蝙蝠,我不會建議使用特定模塊的配置,因爲這聽起來像它會做的事*極其*混亂的下一個人來維護應用程序。我仍然投了票,因爲我可能是錯的。 – karim79 2010-12-02 19:15:35

+1

嘿Darryl,我發現這篇文章,它可能會有所幫助http://www.amazium.com/blog/zend-framework-module-specific-config – tawfekov 2010-12-05 20:20:49

回答

4

我在Zend中使用以下模塊實現。它允許您使用「模塊特定」配置。

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

通過這樣做,您告訴Zend_Application您要使用Modules Bootstrap Resource插件。模塊插件將爲每個模塊加載一個單獨的靴帶類,不包括默認模塊。因此,您需要爲第二個模塊創建一個新的引導類。

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_Module_Bootstrap一樣在Zend_Application_Bootstrap_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"