| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.config.adapters.xml">
- <title>Zend_Config_Xml</title>
- <para>
- <classname>Zend_Config_Xml</classname> дает разработчикам возможность
- хранить конфигурационные данные в простом формате <acronym>XML</acronym> и читать их
- посредством синтаксиса вложенных свойств объектов.
- Корневой элемент в файле или строке с <acronym>XML</acronym> не имеет значения и ему
- может быть дано любое имя. Первый уровень
- элементов <acronym>XML</acronym> соответствует разделам конфигурационных данных. Формат
- <acronym>XML</acronym> поддерживает иерархическую организацию данных через вложенность
- элементов ниже элементов уровня разделов. Содержимое конечного элемента
- соответствует значению элемента конфигурационных данных. Наследование
- разделов поддерживается через специальный атрибут <emphasis>extends</emphasis>,
- значение атрибута соответствует разделу, данные которого наследуются в
- раздел с этим атрибутом.
- </para>
- <note>
- <title>Тип возвращаемых данных</title>
- <para>
- Конфигурационные данные, прочитанные в <classname>Zend_Config_Xml</classname>,
- всегда возвращаются как строки. Приведение данных из строк к требуемым
- типам предоставляется разработчикам.
- </para>
- </note>
- <example id="zend.config.adapters.xml.example.using">
- <title>Использование Zend_Config_Xml</title>
- <para>
- Данный пример демонстрирует основы использования <classname>Zend_Config_Xml</classname>
- для загрузки конфигурационных данных из файла <acronym>XML</acronym>. В этом примере
- используются конфигурационные данные для производственной и
- промежуточной систем. Поскольку конфигурационные данные
- промежуточной системы очень похожи на конфигурационные данные для
- производственной системы, то "промежуточный" (staging) раздел наследует от
- "производственного" (production) раздела. В данном случае выбор
- произвольный, т.е. может быть и наоборот — "производственный"
- раздел наследует от "промежуточного", хотя это может не подходить в
- более сложных случаях. Допустим, конфигурационные данные
- находятся в файле <filename>/path/to/config.xml</filename>:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production>
- <webhost>www.example.com</webhost>
- <database>
- <adapter>pdo_mysql</adapter>
- <params>
- <host>db.example.com</host>
- <username>dbuser</username>
- <password>secret</password>
- <dbname>dbname</dbname>
- </params>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params>
- <host>dev.example.com</host>
- <username>devuser</username>
- <password>devsecret</password>
- </params>
- </database>
- </staging>
- ]]></programlisting>
- <para>
- Далее предположим, что разработчику приложения нужны "промежуточные"
- конфигурационные данные из файла <acronym>XML</acronym>. Загрузить эти данные, указав
- файл <acronym>XML</acronym> и нужный раздел, довольно просто:
- </para>
- <programlisting language="php"><![CDATA[
- $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
- echo $config->database->params->host; // выведет "dev.example.com"
- echo $config->database->params->dbname; // выведет "dbname"
- ]]></programlisting>
- </example>
- <example id="zend.config.adapters.xml.example.attributes">
- <title>Использование тегов в <classname>Zend_Config_Xml</classname></title>
- <para>
- <classname>Zend_Config_Xml</classname> также поддерживает два дополнительных способа
- определения узлов в конфигурации. В обоих способах используются
- атрибуты. Поскольку атрибуты <emphasis>extends</emphasis> и
- <emphasis>value</emphasis> являются зарезервированными ключевыми словами
- (<emphasis>value</emphasis> используется во втором способе
- с применением атрибутов), то они не должны использоваться здесь.
- Первый способ с использованием атрибутов состоит в добавлении
- атрибутов в родительский узел, они потом будут преобразованы в
- потомки этого узла:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production webhost="www.example.com">
- <database adapter="pdo_mysql">
- <params host="db.example.com" username="dbuser" password="secret"
- dbname="dbname"/>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params host="dev.example.com" username="devuser"
- password="devsecret"/>
- </database>
- </staging>
- </configdata>
- ]]></programlisting>
- <para>
- Другой способ не делает конфигурацию заметно короче, но
- облегчает ее поддержку благодаря тому, что не нужно писать имена
- тегов дважды. Вы просто создаете пустой тег, значение которого
- содержится в атрибуте <emphasis>value</emphasis>:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production>
- <webhost>www.example.com</webhost>
- <database>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- <username value="dbuser"/>
- <password value="secret"/>
- <dbname value="dbname"/>
- </params>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params>
- <host value="dev.example.com"/>
- <username value="devuser"/>
- <password value="devsecret"/>
- </params>
- </database>
- </staging>
- </configdata>
- ]]></programlisting>
- </example>
- <note>
- <title>Передача строки с XML</title>
- <para>
- <classname>Zend_Config_Xml</classname> также может загружать
- <acronym>XML</acronym> непосредственно из строки, которая может быть получена,
- например, из базы данных. Строка передается конструктору в качестве
- первого параметра и должна начинаться с символов
- <emphasis>'<?xml'</emphasis>:
- </para>
- <programlisting language="xml"><![CDATA[
- $string = <<<EOT
- <?xml version="1.0"?>
- <config>
- <production>
- <db>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- </params>
- </db>
- </production>
- <staging extends="production">
- <db>
- <params>
- <host value="dev.example.com"/>
- </params>
- </db>
- </staging>
- </config>
- EOT;
- $config = new Zend_Config_Xml($string, 'staging');
- ]]></programlisting>
- </note>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|