2012-04-23 49 views
1

我一直在Zend_Config_Writer玩弄格式化,雖然我可以把它做我想我找到了缺少格式化有點不安,因爲什麼:提供意見或以Zend_Config_Writer

[production : general] 
; 
; Production site configuration data. 
; 

locale           = sv_SE 
... 

變爲

[production : general] 
locale           = sv_SE 
... 

我意識到「新」配置是基於Zend_Config對象中保存的值編寫的,並且該對象不包含任何註釋或平淡的行,但是這使得新配置非常難以閱讀,特別是對於我的公司-工人。

這能解決嗎?我想出的最好的方法是使用不同的部分以「級聯」繼承,但這看起來像一個愚蠢的想法

回答

0

經過一些嘗試,我解決我的問題通過以下方式,併成功進行了測試。

  1. 將配置拆分爲多個文件。在我的情況下,我有1個大的application.ini,它擁有幾乎所有的配置和1個小版本.ini,它包含一些特定於版本的數據。
  2. 創建所有(在我的情況下爲2)Zend_Config_ini對象分離但設置allowModification在一個
  3. 使用Zend_Config_Ini-> Merge()功能合併所有配置,然後將其設置爲只讀
  4. 要更新配置的任何部分,請從該特定ini文件創建一個新的Zend_Config_ini對象,並將其設置爲允許修改並跳過擴展區
  5. 更新配置並使用Zend_Config_Writer_ini寫入更改

示例代碼:

/* Load the config */  
//Get the application-config and set 'allowModifications' => true 
$config = new Zend_Config_Ini('../application/configs/application.ini',$state, array('allowModifications' => true)); 

//Get the second config-file 
$configVersion = new Zend_Config_Ini('../application/configs/version.ini'); 

//Merge both config-files and then set it to read-only 
$config->merge($configVersion); 
$config->setReadOnly(); 

/* Update a part of the config */ 
$configVersion = new Zend_Config_Ini(
     APPLICATION_PATH.'/configs/version.ini', 
     null, 
     array('skipExtends' => true, 'allowModifications' => true) 
    ); 

//Change some data here 
$configVersion->newData = "Some data"; 

//Write the updated ini 
$writer = new Zend_Config_Writer_Ini(
     array('config' => $configVersion, 'filename' => 'Path_To_Config_files/version.ini') 
    ); 
    try 
    { 
     $writer->write(); 
    } 
    catch (Exception $e) { 
     //Error handling 
    } 
0

正如你所說,Zend_Config_Writer將不會提供任何意見,因爲它們不存儲在Zend_Config目的。根據你想要渲染的ini文件的結構,你可以使用「級聯」,至少清除冗餘(它對我來說看起來並不那麼愚蠢,即使在標準的application.ini配置文件中也是如此......) 。

當然,另一種解決方案可能是使用或創建其他的東西來寫你的ini文件,但它可以矯枉過正。

希望幫助,

+0

是它在標準中使用,我用它在我自己的應用程序,但要取代我的部分意見,我需要有一個大致的部分,然後一個Zend配置會話繼承一般情況下,然後一個PHP配置部分,許多不同的部分與我的應用程序連接到的不同數據庫和服務的用戶名/密碼等。我最終會得到18個不同的部分,所有這些部分都應該繼承他們之上的那個部分。現在我已經通過使用兩個配置文件解決了這個問題,所以我可以將大部分註釋保留在主文件中。 – Lobo 2012-04-24 21:57:42