Zend_Config_Xml.xml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.adapters.xml">
  5. <title>Zend_Config_Xml</title>
  6. <para>
  7. <classname>Zend_Config_Xml</classname> permite aos desenvolvedores armazenarem os dados de
  8. configuração em um formato <acronym>XML</acronym> simples e lê-los através de uma sintaxe
  9. de propriedade de objeto aninhado. O nome do elemento raiz do arquivo ou string
  10. <acronym>XML</acronym> é irrelevante e pode ser escolhido. O primeiro nível dos elementos
  11. <acronym>XML</acronym> corresponde às seções de dados de configuração. O formato
  12. <acronym>XML</acronym> suporta organização hierárquica para o aninhamento dos elementos
  13. <acronym>XML</acronym> abaixo dos elementos de seção-nível. O conteúdo de uma folha de
  14. elemento <acronym>XML</acronym> (leaf) corresponde ao valor de um dado de configuração.
  15. Herança de seção é suportada por um atributo <acronym>XML</acronym> especial chamado
  16. <emphasis>extends</emphasis>, e o valor deste atributo corresponde à seção a que a
  17. informação deve ser herdada.
  18. </para>
  19. <note>
  20. <title>Tipo de Retorno</title>
  21. <para>
  22. Os dados de configuração lidos em <classname>Zend_Config_Xml</classname> são sempre
  23. retornados como strings. A conversão de dados de strings para outros tipos é deixado
  24. para os desenvolvedores de acordo com suas necessidades específicas.
  25. </para>
  26. </note>
  27. <example id="zend.config.adapters.xml.example.using">
  28. <title>Usando o Zend_Config_Xml</title>
  29. <para>
  30. Este exemplo ilustra uma utilização básica de <classname>Zend_Config_Xml</classname>
  31. para carregar dados de configuração de um arquivo <acronym>XML</acronym>. Neste
  32. exemplo, existem dados de configuração, tanto para um sistema de produção como para um
  33. sistema de testes. Pois os dados de configuração de um sistema de testes são muito
  34. semelhantes aos de produção, a seção de testes herda da seção de produção. Neste caso,
  35. a decisão é arbitrária e poderia ter sido escrita de modo inverso, com a seção de
  36. produção herdando da seção de testes, embora isso possa não ser o caso em situações
  37. mais complexas. Suponha-se, então, que os dados de configuração a seguir estão
  38. contidos em <filename>/path/to/config.xml</filename>:
  39. </para>
  40. <programlisting language="xml"><![CDATA[
  41. <?xml version="1.0"?>
  42. <configdata>
  43. <production>
  44. <webhost>www.example.com</webhost>
  45. <database>
  46. <adapter>pdo_mysql</adapter>
  47. <params>
  48. <host>db.example.com</host>
  49. <username>dbuser</username>
  50. <password>secret</password>
  51. <dbname>dbname</dbname>
  52. </params>
  53. </database>
  54. </production>
  55. <staging extends="production">
  56. <database>
  57. <params>
  58. <host>dev.example.com</host>
  59. <username>devuser</username>
  60. <password>devsecret</password>
  61. </params>
  62. </database>
  63. </staging>
  64. </configdata>
  65. ]]></programlisting>
  66. <para>
  67. Em seguida, suponha que o desenvolvedor do aplicativo necessite dos dados de
  68. configuração de testes do arquivo <acronym>XML</acronym>. É o simples caso de carregar
  69. esses dados especificando o arquivo <acronym>XML</acronym> e a seção de testes:
  70. </para>
  71. <programlisting language="php"><![CDATA[
  72. $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
  73. echo $config->database->params->host; // prints "dev.example.com"
  74. echo $config->database->params->dbname; // prints "dbname"
  75. ]]></programlisting>
  76. </example>
  77. <example id="zend.config.adapters.xml.example.attributes">
  78. <title>Usando os Atributos de Tag no Zend_Config_Xml</title>
  79. <para>
  80. <classname>Zend_Config_Xml</classname> também suporta outras duas maneiras para definir
  81. os nós na configuração. Ambas fazem uso de atributos. A partir do momento que os
  82. atributos <emphasis>extends</emphasis> e <emphasis>value</emphasis> são palavras-chaves
  83. reservadas (o último através segunda maneira de uso dos atributos), eles não poderão
  84. ser utilizados. A primeira maneira usar os atributos é adicionar um nó pai, assim eles
  85. serão interpretados como um filho deste nó:
  86. </para>
  87. <programlisting language="xml"><![CDATA[
  88. <?xml version="1.0"?>
  89. <configdata>
  90. <production webhost="www.example.com">
  91. <database adapter="pdo_mysql">
  92. <params host="db.example.com" username="dbuser" password="secret"
  93. dbname="dbname"/>
  94. </database>
  95. </production>
  96. <staging extends="production">
  97. <database>
  98. <params host="dev.example.com" username="devuser"
  99. password="devsecret"/>
  100. </database>
  101. </staging>
  102. </configdata>
  103. ]]></programlisting>
  104. <para>
  105. A outra maneira não encurta realmente a configuração, mas a torna mais fácil para
  106. manter, pois você não tem que escrever o nome da tag duas vezes. Você simplesmente cria
  107. uma tag vazia com o valor no atributo <emphasis>value</emphasis>:
  108. </para>
  109. <programlisting language="xml"><![CDATA[
  110. <?xml version="1.0"?>
  111. <configdata>
  112. <production>
  113. <webhost>www.example.com</webhost>
  114. <database>
  115. <adapter value="pdo_mysql"/>
  116. <params>
  117. <host value="db.example.com"/>
  118. <username value="dbuser"/>
  119. <password value="secret"/>
  120. <dbname value="dbname"/>
  121. </params>
  122. </database>
  123. </production>
  124. <staging extends="production">
  125. <database>
  126. <params>
  127. <host value="dev.example.com"/>
  128. <username value="devuser"/>
  129. <password value="devsecret"/>
  130. </params>
  131. </database>
  132. </staging>
  133. </configdata>
  134. ]]></programlisting>
  135. </example>
  136. <note>
  137. <title>Strings XML</title>
  138. <para>
  139. <classname>Zend_Config_Xml</classname> é capaz de carregar uma string
  140. <acronym>XML</acronym> diretamente, por exemplo, uma que foi recuperada de um banco de
  141. dados. A string é passada como primeiro parâmetro para o construtor e deve começar com
  142. os caracteres <emphasis>'&lt;?xml'</emphasis>:
  143. </para>
  144. <programlisting language="xml"><![CDATA[
  145. $string = <<<EOT
  146. <?xml version="1.0"?>
  147. <config>
  148. <production>
  149. <db>
  150. <adapter value="pdo_mysql"/>
  151. <params>
  152. <host value="db.example.com"/>
  153. </params>
  154. </db>
  155. </production>
  156. <staging extends="production">
  157. <db>
  158. <params>
  159. <host value="dev.example.com"/>
  160. </params>
  161. </db>
  162. </staging>
  163. </config>
  164. EOT;
  165. $config = new Zend_Config_Xml($string, 'staging');
  166. ]]></programlisting>
  167. </note>
  168. <note>
  169. <title>Namespace XML do Zend_Config</title>
  170. <para>
  171. <classname>Zend_Config</classname> vem com sua próprio namespace <acronym>XML</acronym>,
  172. que adiciona funcionalidade adicional ao processo de análise. Para aproveitá-la, você
  173. tem que definir um namespace com o namespace <acronym>URI</acronym>
  174. <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename> em seu nó raiz
  175. de configuração.
  176. </para>
  177. <para>
  178. Com o namespace habilitado, você pode usar constantes do <acronym>PHP</acronym> dentro
  179. de arquivos de configuração. Além disso, o atributo <emphasis>extends</emphasis> foi
  180. transferido para um novo namespace e está depreciado no namespace
  181. <constant>NULL</constant>. Ele será completamente removido no Zend Framework 2.0.
  182. </para>
  183. <programlisting language="xml"><![CDATA[
  184. $string = <<<EOT
  185. <?xml version="1.0"?>
  186. <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  187. <production>
  188. <includePath>
  189. <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
  190. <db>
  191. <adapter value="pdo_mysql"/>
  192. <params>
  193. <host value="db.example.com"/>
  194. </params>
  195. </db>
  196. </production>
  197. <staging zf:extends="production">
  198. <db>
  199. <params>
  200. <host value="dev.example.com"/>
  201. </params>
  202. </db>
  203. </staging>
  204. </config>
  205. EOT;
  206. define('APPLICATION_PATH', dirname(__FILE__));
  207. $config = new Zend_Config_Xml($string, 'staging');
  208. echo $config->includePath; // Prints "/var/www/something/library"
  209. ]]></programlisting>
  210. </note>
  211. </sect1>
  212. <!--
  213. vim:se ts=4 sw=4 et:
  214. -->