1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.config.adapters.xml">
5 <title>Zend_Config_Xml</title>
7 <classname>Zend_Config_Xml</classname> を使用すると、シンプルな <acronym>XML</acronym>
8 形式で保存した設定データを、オブジェクトのプロパティとして扱えるようになります。
9 <acronym>XML</acronym> ファイルあるいは文字列のルート要素は設定には関係しないので、
11 その直下のレベルの <acronym>XML</acronym> 要素が設定データのセクションに対応します。
12 セクションレベルの要素の下に <acronym>XML</acronym> 要素を配置することで、
14 末端レベルの <acronym>XML</acronym> 要素が設定データの値に対応します。
15 セクションの継承は、<acronym>XML</acronym> の属性 <emphasis>extends</emphasis>
17 データを継承しているセクション名を表します。
22 <classname>Zend_Config_Xml</classname> で読み込んだ設定データは、
27 <example id="zend.config.adapters.xml.example.using">
28 <title>Zend_Config_Xml の使用法</title>
30 この例は、<classname>Zend_Config_Xml</classname> を使用して
31 <acronym>XML</acronym> ファイルから設定データを読み込むための基本的な方法を説明するものです。
32 この例では、運用環境の設定と開発環境の設定を両方管理しています。
33 開発環境用の設定データは運用環境用のものと非常に似ているので、
34 開発環境用のセクションは運用環境用のセクションを継承させています。
35 今回の場合なら、逆に運用環境用のセクションを開発環境用のものから継承させてもいいでしょう。
36 そうしたからといって特に状況が複雑になるわけではありません。
38 <filename>/path/to/config.xml</filename> に存在するものとします。
40 <programlisting language="xml"><![CDATA[
44 <webhost>www.example.com</webhost>
46 <adapter>pdo_mysql</adapter>
48 <host>db.example.com</host>
49 <username>dbuser</username>
50 <password>secret</password>
51 <dbname>dbname</dbname>
55 <staging extends="production">
58 <host>dev.example.com</host>
59 <username>devuser</username>
60 <password>devsecret</password>
67 次に、開発者が開発環境用の設定データを <acronym>XML</acronym> ファイルから読み込むことを考えます。
68 これは簡単なことで、単に <acronym>XML</acronym> ファイルとセクションを指定するだけです。
70 <programlisting language="php"><![CDATA[
71 $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
73 echo $config->database->params->host; // "dev.example.com" と出力します
74 echo $config->database->params->dbname; // "dbname" と出力します
77 <example id="zend.config.adapters.xml.example.attributes">
78 <title>Zend_Config_Xml におけるタグの属性の使用</title>
80 <classname>Zend_Config_Xml</classname> では、設定内でノードを定義する際にさらに 2 通りの方法を用意しています。
81 どちらも属性を使用するものです。<emphasis>extends</emphasis> 属性や
82 <emphasis>value</emphasis> 属性は予約語
83 (後者は、属性を使う 2 番目の方法で使用します)
84 となり、使用できません。属性を使用する方法のひとつは、
88 <programlisting language="xml"><![CDATA[
91 <production webhost="www.example.com">
92 <database adapter="pdo_mysql">
93 <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
96 <staging extends="production">
98 <params host="dev.example.com" username="devuser" password="devsecret"/>
104 もうひとつの方法は、設定ファイルの記述量を減らすことはありません。
105 ただ、同じタグ名を何度も書く必要がなくなるので保守性は上がります。
106 単純に空のタグを作成し、その値を <emphasis>value</emphasis>
109 <programlisting language="xml"><![CDATA[
110 <?xml version="1.0"?>
113 <webhost>www.example.com</webhost>
115 <adapter value="pdo_mysql"/>
117 <host value="db.example.com"/>
118 <username value="dbuser"/>
119 <password value="secret"/>
120 <dbname value="dbname"/>
124 <staging extends="production">
127 <host value="dev.example.com"/>
128 <username value="devuser"/>
129 <password value="devsecret"/>
137 <title>XML 文字列</title>
139 <classname>Zend_Config_Xml</classname> は、データベースなどから取得した
140 <acronym>XML</acronym> 文字列を直接読み込むこともできます。
141 文字列はコンストラクタの最初のパラメータとして渡し、最初は
142 <emphasis>'<?xml'</emphasis> で始まらなければなりません。
144 <programlisting language="xml"><![CDATA[
146 <?xml version="1.0"?>
150 <adapter value="pdo_mysql"/>
152 <host value="db.example.com"/>
156 <staging extends="production">
159 <host value="dev.example.com"/>
166 $config = new Zend_Config_Xml($string, 'staging');
170 <title>Zend_Config XML 名前空間</title>
172 <classname>Zend_Config</classname> は独自の <acronym>XML</acronym>
173 名前空間を持っており、パース処理に機能を追加できます。
174 これを使用するには、名前空間 <acronym>URI</acronym>
175 <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename>
176 をルートノードで定義しなければなりません。
180 この名前空間を有効にすると、<acronym>PHP</acronym>
181 の定数を設定ファイル内で使用できるようになります。
182 <emphasis>extends</emphasis> 属性が新しい名前空間に移動し、
183 <constant>NULL</constant> 名前空間では非推奨となります。
184 これは、Zend Framework 2.0 で完全に削除される予定です。
186 <programlisting language="xml"><![CDATA[
188 <?xml version="1.0"?>
189 <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
192 <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
194 <adapter value="pdo_mysql"/>
196 <host value="db.example.com"/>
200 <staging zf:extends="production">
203 <host value="dev.example.com"/>
210 define('APPLICATION_PATH', dirname(__FILE__));
211 $config = new Zend_Config_Xml($string, 'staging');
213 echo $config->includePath; // "/var/www/something/library" と表示します