1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.config.writer.introduction">
5 <title>Zend_Config_Writer</title>
8 <classname>Zend_Config_Writer</classname> は、設定ファイルに
9 <classname>Zend_Config</classname> オブジェクトを書き出します。
10 アダプタなしでも動作するので、使用するのも簡単です。
11 デフォルトでは <classname>Zend_Config_Writer</classname>
12 には 3 種類のアダプタが同梱されており、全てファイル・ベースです。
13 まず、<emphasis>filename</emphasis> や <emphasis>config</emphasis>
14 のオプションを指定してライターのインスタンスを作成します。
15 それからライターの <methodname>write()</methodname> メソッドをコールすると、
16 設定ファイルが作成されます。<varname>$filename</varname> や
17 <varname>$config</varname> を、直接 <methodname>write()</methodname>
18 メソッドで設定することもできます。現在は、次のライターが
19 <classname>Zend_Config_Writer</classname> に同梱されています。
25 <classname>Zend_Config_Writer_Array</classname>
31 <classname>Zend_Config_Writer_Ini</classname>
37 <classname>Zend_Config_Writer_Xml</classname>
43 <acronym>INI</acronym> ライターでは、セクションについてのレンダリング用のモードが2つあります。
44 既定では、トップレベルの構成節は、常にセクション名に含まれます。
45 <command>$writer->setRenderWithoutSections()</command> を呼ぶことにより、
46 オプションの全てが <acronym>INI</acronym> ファイルのグローバル名前空間に含まれます。
51 加えて、<classname>Zend_Config_Writer_Ini</classname> にはオプションのパラメータ
52 <emphasis>nestSeparator</emphasis> が用意されています。
53 これは、ノードを区切る文字を定義します。デフォルトはドットひとつで、
54 これは <classname>Zend_Config_Ini</classname> のデフォルトと同じです。
58 <classname>Zend_Config</classname> オブジェクトを変更したり作成したりする際には、
59 知っておくべきことがあります。値を作成したり変更したりするには、
60 パラメータのアクセサ (<emphasis>-></emphasis>) で <classname>Zend_Config</classname>
62 ルート内のセクションやブランチを作成するには、新規配列を作成します
63 ("<command>$config->branch = array();</command>")。
65 <classname>Zend_Config</classname> オブジェクトの
66 <methodname>setExtend()</methodname> メソッドをコールします。
69 <example id="zend.config.writer.example.using">
70 <title>Zend_Config_Writer の使用法</title>
73 この例では、<classname>Zend_Config_Writer_Xml</classname>
74 で新しい設定ファイルを作成する方法を説明します。
77 <programlisting language="php"><![CDATA[
78 // config オブジェクトを作成します
79 $config = new Zend_Config(array(), true);
80 $config->production = array();
81 $config->staging = array();
83 $config->setExtend('staging', 'production');
85 $config->production->db = array();
86 $config->production->db->hostname = 'localhost';
87 $config->production->db->username = 'production';
89 $config->staging->db = array();
90 $config->staging->db->username = 'staging';
92 // 次のいずれかの方法で設定ファイルを書き出します
94 $writer = new Zend_Config_Writer_Xml(array('config' => $config,
95 'filename' => 'config.xml'));
99 $writer = new Zend_Config_Writer_Xml();
100 $writer->setConfig($config)
101 ->setFilename('config.xml')
105 $writer = new Zend_Config_Writer_Xml();
106 $writer->write('config.xml', $config);
110 これは、production と staging というセクションを持つ <acronym>XML</acronym>
111 設定ファイルを作成します。staging は production を継承しています。
115 <example id="zend.config.writer.modifying">
116 <title>既存の設定の変更</title>
119 この例では、既存の設定ファイルを編集する方法を説明します。
122 <programlisting language="php"><![CDATA[
123 // すべてのセクションを既存の設定ファイルから読み込みますが継承は読み飛ばします
124 $config = new Zend_Config_Ini('config.ini',
126 array('skipExtends' => true,
127 'allowModifications' => true));
130 $config->production->hostname = 'foobar';
133 $writer = new Zend_Config_Writer_Ini(array('config' => $config,
134 'filename' => 'config.ini'));
140 <title>設定ファイルの読み込み</title>
142 既存の設定ファイルを読み込んで変更をする場合は、
143 すべてのセクションを読み込んで継承を読み飛ばすことが大切です。
144 そうすることで、値がマージされてしまうことがなくなります。
146 <emphasis>skipExtends</emphasis> オプションを指定します。
151 構成節の文字列を作成するために、ファイル・ベースのライタ
152 ( <acronym>INI</acronym> 、 <acronym>XML</acronym> 及び <acronym>PHP</acronym> 配列)
153 全てで内部的に <methodname>render()</methodname> が使用されます。
154 コンフィギュレーション・データの文字列表現にアクセスする必要があれば、