[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Config_Xml.xml
blob11c6f7e4be65a62140dc714f952cdb8c408e49ef
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.config.adapters.xml">
4     <title>Zend_Config_Xml</title>
5     <para>
6         <classname>Zend_Config_Xml</classname> дает разработчикам возможность
7         хранить конфигурационные данные в простом формате <acronym>XML</acronym> и читать их
8         посредством синтаксиса вложенных свойств объектов.
9         Корневой элемент в файле или строке с <acronym>XML</acronym> не имеет значения и ему
10         может быть дано любое имя. Первый уровень
11         элементов <acronym>XML</acronym> соответствует разделам конфигурационных данных. Формат
12         <acronym>XML</acronym> поддерживает иерархическую организацию данных через вложенность
13         элементов ниже элементов уровня разделов. Содержимое конечного элемента
14         соответствует значению элемента конфигурационных данных. Наследование
15         разделов поддерживается через специальный атрибут <emphasis>extends</emphasis>,
16         значение атрибута соответствует разделу, данные которого наследуются в
17         раздел с этим атрибутом.
18     </para>
19     <note>
20         <title>Тип возвращаемых данных</title>
21         <para>
22             Конфигурационные данные, прочитанные в <classname>Zend_Config_Xml</classname>,
23             всегда возвращаются как строки. Приведение данных из строк к требуемым
24             типам предоставляется разработчикам.
25         </para>
26     </note>
27     <example id="zend.config.adapters.xml.example.using">
28         <title>Использование Zend_Config_Xml</title>
29         <para>
30             Данный пример демонстрирует основы использования <classname>Zend_Config_Xml</classname>
31             для загрузки конфигурационных данных из файла <acronym>XML</acronym>. В этом примере
32             используются конфигурационные данные для производственной и
33             промежуточной систем. Поскольку конфигурационные данные
34             промежуточной системы очень похожи на конфигурационные данные для
35             производственной системы, то "промежуточный" (staging) раздел наследует от
36             "производственного" (production) раздела. В данном случае выбор
37             произвольный, т.е. может быть и наоборот — "производственный"
38             раздел наследует от "промежуточного", хотя это может не подходить в
39             более сложных случаях. Допустим, конфигурационные данные
40             находятся в файле <filename>/path/to/config.xml</filename>:
41         </para>
42         <programlisting language="xml"><![CDATA[
43 <?xml version="1.0"?>
44 <configdata>
45     <production>
46         <webhost>www.example.com</webhost>
47         <database>
48             <adapter>pdo_mysql</adapter>
49             <params>
50                 <host>db.example.com</host>
51                 <username>dbuser</username>
52                 <password>secret</password>
53                 <dbname>dbname</dbname>
54             </params>
55         </database>
56     </production>
57     <staging extends="production">
58         <database>
59             <params>
60                 <host>dev.example.com</host>
61                 <username>devuser</username>
62                 <password>devsecret</password>
63             </params>
64         </database>
65     </staging>
66 ]]></programlisting>
67         <para>
68             Далее предположим, что разработчику приложения нужны "промежуточные"
69             конфигурационные данные из файла <acronym>XML</acronym>. Загрузить эти данные, указав
70             файл <acronym>XML</acronym> и нужный раздел, довольно просто:
71         </para>
72         <programlisting language="php"><![CDATA[
73 $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
75 echo $config->database->params->host;   // выведет "dev.example.com"
76 echo $config->database->params->dbname; // выведет "dbname"
77 ]]></programlisting>
78     </example>
79     <example id="zend.config.adapters.xml.example.attributes">
80         <title>Использование тегов в <classname>Zend_Config_Xml</classname></title>
81         <para>
82             <classname>Zend_Config_Xml</classname> также поддерживает два дополнительных способа
83             определения узлов в конфигурации. В обоих способах используются
84             атрибуты. Поскольку атрибуты <emphasis>extends</emphasis> и
85             <emphasis>value</emphasis> являются зарезервированными ключевыми словами
86             (<emphasis>value</emphasis> используется во втором способе
87             с применением атрибутов), то они не должны использоваться здесь.
88             Первый способ с использованием атрибутов состоит в добавлении
89             атрибутов в родительский узел, они потом будут преобразованы в
90             потомки этого узла:
91         </para>
92         <programlisting language="xml"><![CDATA[
93 <?xml version="1.0"?>
94 <configdata>
95     <production webhost="www.example.com">
96         <database adapter="pdo_mysql">
97             <params host="db.example.com" username="dbuser" password="secret"
98                     dbname="dbname"/>
99         </database>
100     </production>
101     <staging extends="production">
102         <database>
103             <params host="dev.example.com" username="devuser"
104                     password="devsecret"/>
105         </database>
106     </staging>
107 </configdata>
108 ]]></programlisting>
109         <para>
110             Другой способ не делает конфигурацию заметно короче, но
111             облегчает ее поддержку благодаря тому, что не нужно писать имена
112             тегов дважды. Вы просто создаете пустой тег, значение которого
113             содержится в атрибуте <emphasis>value</emphasis>:
114         </para>
115         <programlisting language="xml"><![CDATA[
116 <?xml version="1.0"?>
117 <configdata>
118     <production>
119         <webhost>www.example.com</webhost>
120         <database>
121             <adapter value="pdo_mysql"/>
122             <params>
123                 <host value="db.example.com"/>
124                 <username value="dbuser"/>
125                 <password value="secret"/>
126                 <dbname value="dbname"/>
127             </params>
128         </database>
129     </production>
130     <staging extends="production">
131         <database>
132             <params>
133                 <host value="dev.example.com"/>
134                 <username value="devuser"/>
135                 <password value="devsecret"/>
136             </params>
137         </database>
138     </staging>
139 </configdata>
140 ]]></programlisting>
141     </example>
142     <note>
143         <title>Передача строки с XML</title>
144         <para>
145             <classname>Zend_Config_Xml</classname> также может загружать
146             <acronym>XML</acronym> непосредственно из строки, которая может быть получена,
147             например, из базы данных. Строка передается конструктору в качестве
148             первого параметра и должна начинаться с символов
149             <emphasis>'&lt;?xml'</emphasis>:
150         </para>
151         <programlisting language="xml"><![CDATA[
152 $string = <<<EOT
153 <?xml version="1.0"?>
154 <config>
155     <production>
156         <db>
157             <adapter value="pdo_mysql"/>
158             <params>
159                 <host value="db.example.com"/>
160             </params>
161         </db>
162     </production>
163     <staging extends="production">
164         <db>
165             <params>
166                 <host value="dev.example.com"/>
167             </params>
168         </db>
169     </staging>
170 </config>
171 EOT;
173 $config = new Zend_Config_Xml($string, 'staging');
174 ]]></programlisting>
175     </note>
176 </sect1>
177 <!--
178 vim:se ts=4 sw=4 et: