| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.config.adapters.xml">
- <title>Zend_Config_Xml</title>
- <para>
- <classname>Zend_Config_Xml</classname> permite aos desenvolvedores armazenarem os dados de
- configuração em um formato <acronym>XML</acronym> simples e lê-los através de uma sintaxe
- de propriedade de objeto aninhado. O nome do elemento raiz do arquivo ou string
- <acronym>XML</acronym> é irrelevante e pode ser escolhido. O primeiro nível dos elementos
- <acronym>XML</acronym> corresponde às seções de dados de configuração. O formato
- <acronym>XML</acronym> suporta organização hierárquica para o aninhamento dos elementos
- <acronym>XML</acronym> abaixo dos elementos de seção-nível. O conteúdo de uma folha de
- elemento <acronym>XML</acronym> (leaf) corresponde ao valor de um dado de configuração.
- Herança de seção é suportada por um atributo <acronym>XML</acronym> especial chamado
- <emphasis>extends</emphasis>, e o valor deste atributo corresponde à seção a que a
- informação deve ser herdada.
- </para>
- <note>
- <title>Tipo de Retorno</title>
- <para>
- Os dados de configuração lidos em <classname>Zend_Config_Xml</classname> são sempre
- retornados como strings. A conversão de dados de strings para outros tipos é deixado
- para os desenvolvedores de acordo com suas necessidades específicas.
- </para>
- </note>
- <example id="zend.config.adapters.xml.example.using">
- <title>Usando o Zend_Config_Xml</title>
- <para>
- Este exemplo ilustra uma utilização básica de <classname>Zend_Config_Xml</classname>
- para carregar dados de configuração de um arquivo <acronym>XML</acronym>. Neste
- exemplo, existem dados de configuração, tanto para um sistema de produção como para um
- sistema de testes. Pois os dados de configuração de um sistema de testes são muito
- semelhantes aos de produção, a seção de testes herda da seção de produção. Neste caso,
- a decisão é arbitrária e poderia ter sido escrita de modo inverso, com a seção de
- produção herdando da seção de testes, embora isso possa não ser o caso em situações
- mais complexas. Suponha-se, então, que os dados de configuração a seguir estão
- contidos em <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>
- </configdata>
- ]]></programlisting>
- <para>
- Em seguida, suponha que o desenvolvedor do aplicativo necessite dos dados de
- configuração de testes do arquivo <acronym>XML</acronym>. É o simples caso de carregar
- esses dados especificando o arquivo <acronym>XML</acronym> e a seção de testes:
- </para>
- <programlisting language="php"><![CDATA[
- $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
- echo $config->database->params->host; // prints "dev.example.com"
- echo $config->database->params->dbname; // prints "dbname"
- ]]></programlisting>
- </example>
- <example id="zend.config.adapters.xml.example.attributes">
- <title>Usando os Atributos de Tag no Zend_Config_Xml</title>
- <para>
- <classname>Zend_Config_Xml</classname> também suporta outras duas maneiras para definir
- os nós na configuração. Ambas fazem uso de atributos. A partir do momento que os
- atributos <emphasis>extends</emphasis> e <emphasis>value</emphasis> são palavras-chaves
- reservadas (o último através segunda maneira de uso dos atributos), eles não poderão
- ser utilizados. A primeira maneira usar os atributos é adicionar um nó pai, assim eles
- serão interpretados como um filho deste nó:
- </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>
- A outra maneira não encurta realmente a configuração, mas a torna mais fácil para
- manter, pois você não tem que escrever o nome da tag duas vezes. Você simplesmente cria
- uma tag vazia com o valor no atributo <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>Strings XML</title>
- <para>
- <classname>Zend_Config_Xml</classname> é capaz de carregar uma string
- <acronym>XML</acronym> diretamente, por exemplo, uma que foi recuperada de um banco de
- dados. A string é passada como primeiro parâmetro para o construtor e deve começar com
- os caracteres <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>
- <note>
- <title>Namespace XML do Zend_Config</title>
- <para>
- <classname>Zend_Config</classname> vem com sua próprio namespace <acronym>XML</acronym>,
- que adiciona funcionalidade adicional ao processo de análise. Para aproveitá-la, você
- tem que definir um namespace com o namespace <acronym>URI</acronym>
- <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename> em seu nó raiz
- de configuração.
- </para>
- <para>
- Com o namespace habilitado, você pode usar constantes do <acronym>PHP</acronym> dentro
- de arquivos de configuração. Além disso, o atributo <emphasis>extends</emphasis> foi
- transferido para um novo namespace e está depreciado no namespace
- <constant>NULL</constant>. Ele será completamente removido no Zend Framework 2.0.
- </para>
- <programlisting language="xml"><![CDATA[
- $string = <<<EOT
- <?xml version="1.0"?>
- <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
- <production>
- <includePath>
- <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
- <db>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- </params>
- </db>
- </production>
- <staging zf:extends="production">
- <db>
- <params>
- <host value="dev.example.com"/>
- </params>
- </db>
- </staging>
- </config>
- EOT;
- define('APPLICATION_PATH', dirname(__FILE__));
- $config = new Zend_Config_Xml($string, 'staging');
- echo $config->includePath; // Prints "/var/www/something/library"
- ]]></programlisting>
- </note>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|