1

私はZend_Config_Writerで遊んでいますが、やりたいことを実行させることはできますが、次の理由から、フォーマットの欠如が少し気になります。

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

locale                                          = sv_SE
...

になる

[production : general]   
locale                                          = sv_SE
...

「新しい」構成はZend_Configオブジェクトに保存された値に基づいて記述されており、このオブジェクトにはコメントや無味乾燥な行が含まれていないことを認識していますが、これにより、特に同僚にとって新しい構成が非常に読みにくくなります。

これはどういうわけか解決できますか?私が思いついた最善の方法は、「カスケード」継承を使用してさまざまなセクションを使用することですが、それはばかげた考えのようです

4

2 に答える 2

0

あなたが言うように、それらはオブジェクトZend_Config_Writerに保存されていないので、コメントをレンダリングしません。Zend_Configレンダリングするiniファイルの構造によっては、少なくとも冗長性をクリアするために「カスケード」を使用する場合があります(私にはそれほど愚かではないように見えますが、標準の構成application.iniファイルでも実行されます...)。

もちろん、別の解決策は、iniファイルを書き込むために何か他のものを使用または作成することかもしれませんが、それはやり過ぎかもしれません。

お役に立てば幸いです。

于 2012-04-24T13:21:05.517 に答える
0

いくつかの実験の後、私は次の方法で問題を解決し、正常にテストしました。

  1. 構成を複数のファイルに分割します。私の場合、ほとんどすべての構成を保持する1つの大きなapplication.iniと、いくつかのバージョン固有のデータを保持する1つの小さなversion.iniがあります。
  2. すべての(私の場合は2)Zend_Config_iniオブジェクトを個別に作成しますが、1つに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
    }
于 2012-05-10T08:31:10.803 に答える