Zend_Config_Xml.xml 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  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>
  8. permite a los desarrolladores almacenar
  9. datos de configuración en un formato sencillo
  10. <acronym>XML</acronym>
  11. y leerlos a través de
  12. una sintáxis de propiedades de objetos anidados. El elemento raíz del
  13. archivo
  14. <acronym>XML</acronym>
  15. es irrelevante y puede ser nombrado arbitrariamente.
  16. El primer nivel de elementos
  17. <acronym>XML</acronym>
  18. corresponde con las secciones de datos
  19. de configuración. El formato
  20. <acronym>XML</acronym>
  21. admite organización jerárquica a
  22. través del anidamiento de elementos
  23. <acronym>XML</acronym>
  24. bajo los elementos a nivel de
  25. sección. El contenido de un elemento
  26. <acronym>XML</acronym>
  27. a nivel de hoja corresponde al
  28. valor de un dato de configuración. La herencia de sección está
  29. permitida
  30. por un atributo
  31. <acronym>XML</acronym>
  32. especial llamado
  33. <emphasis>extends</emphasis>
  34. , y el valor de
  35. este atributo se corresponde con la sección de la cual los datos son
  36. heredados por la sección extendida..
  37. </para>
  38. <note>
  39. <title>Tipo devuelto</title>
  40. <para>
  41. Los datos de configuración que se leen en
  42. <classname>Zend_Config_Xml</classname>
  43. son siempre devueltos como strings.
  44. La conversión de datos de string a otros tipos se deja en manos de los
  45. desarrolladores para que se ajuste a sus necesidades particulares.
  46. </para>
  47. </note>
  48. <example id="zend.config.adapters.xml.example.using">
  49. <title>Usando Zend_Config_Xml</title>
  50. <para>
  51. Este ejemplo ilustra un uso básico de
  52. <classname>Zend_Config_Xml</classname>
  53. para cargar datos de configuración de un archivo
  54. <acronym>XML</acronym>
  55. . En este ejemplo
  56. hay datos de configuración tanto para un sistema de producción como
  57. para un sistema de pruebas. Debido a que los datos de configuración del
  58. sistema de pruebas son muy similares a los de producción, la sección de
  59. pruebas hereda de la sección de producción. En este caso, la decisión
  60. es arbitraria y podría haberse escrito a la inversa, con la sección de
  61. producción heredando de la sección de pruebas, a pesar de que éste no
  62. sería el caso para situaciones más complejas. Suponga, pues, que los
  63. datos de configuración siguientes están contenidos
  64. en
  65. <filename>/path/to/config.xml</filename>
  66. ::
  67. </para>
  68. <programlisting language="xml"><![CDATA[
  69. <?xml version="1.0"?>
  70. <configdata>
  71. <production>
  72. <webhost>www.example.com</webhost>
  73. <database>
  74. <adapter>pdo_mysql</adapter>
  75. <params>
  76. <host>db.example.com</host>
  77. <username>dbuser</username>
  78. <password>secret</password>
  79. <dbname>dbname</dbname>
  80. </params>
  81. </database>
  82. </production>
  83. <staging extends="production">
  84. <database>
  85. <params>
  86. <host>dev.example.com</host>
  87. <username>devuser</username>
  88. <password>devsecret</password>
  89. </params>
  90. </database>
  91. </staging>
  92. </configdata>
  93. ]]></programlisting>
  94. <para>
  95. Ahora, asuma que el desarrollador de aplicaciones necesita los datos
  96. de configuración de
  97. la fase de pruebas del archivo
  98. <acronym>XML</acronym>
  99. . Es una tarea
  100. sencilla cargar estos datos, especificando el archivo
  101. <acronym>XML</acronym>
  102. y la
  103. sección de pruebas:
  104. </para>
  105. <programlisting language="php"><![CDATA[
  106. $config = new Zend_Config_Xml('/ruta/de/config.xml', 'pruebas');
  107. echo $config->database->params->host; // muestra "dev.example.com"
  108. echo $config->database->params->dbname; // muestra "dbname"
  109. ]]></programlisting>
  110. </example>
  111. <example id="zend.config.adapters.xml.example.attributes">
  112. <title>Usando atributos de etiqueta en Zend_Config_Xml</title>
  113. <para>
  114. Zend_Config_Xml también soporta dos formas adicionales de definir
  115. nodos en la
  116. configuración. Ambas hacen uso de atributos. Dado que
  117. los atributos
  118. <emphasis>extends</emphasis>
  119. y
  120. <emphasis>value</emphasis>
  121. son palabras
  122. reservadas (la última por la segunda manera de usar atributos),
  123. pueden no ser
  124. utilizadas.
  125. La primera manera de utilizar atributos es añadir atributos en un
  126. nodo padre, el cual será
  127. interpretado como hijo de ese nodo:
  128. </para>
  129. <programlisting language="xml"><![CDATA[
  130. <?xml version="1.0"?>
  131. <configdata>
  132. <production webhost="www.example.com">
  133. <database adapter="pdo_mysql">
  134. <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
  135. </database>
  136. </production>
  137. <staging extends="production">
  138. <database>
  139. <params host="dev.example.com" username="devuser" password="devsecret"/>
  140. </database>
  141. </staging>
  142. </configdata>
  143. ]]></programlisting>
  144. <para>
  145. La otra forma no reduce la configuración, sino que permite mantenerla de
  146. forma más fácil dado que no es necesario escribir el nombre de la
  147. etiqueta dos veces. Simplemente, cree una etiqueta vacía con el valor en
  148. el atributo
  149. <emphasis>value</emphasis>
  150. :
  151. </para>
  152. <programlisting language="xml"><![CDATA[
  153. <?xml version="1.0"?>
  154. <configdata>
  155. <production>
  156. <webhost>www.example.com</webhost>
  157. <database>
  158. <adapter value="pdo_mysql"/>
  159. <params>
  160. <host value="db.example.com"/>
  161. <username value="dbuser"/>
  162. <password value="secret"/>
  163. <dbname value="dbname"/>
  164. </params>
  165. </database>
  166. </production>
  167. <staging extends="production">
  168. <database>
  169. <params>
  170. <host value="dev.example.com"/>
  171. <username value="devuser"/>
  172. <password value="devsecret"/>
  173. </params>
  174. </database>
  175. </staging>
  176. </configdata>
  177. ]]></programlisting>
  178. </example>
  179. <note>
  180. <title>XML strings</title>
  181. <para>
  182. <classname>Zend_Config_Xml</classname>
  183. is able to load an
  184. <acronym>XML</acronym>
  185. string directly,
  186. such as that retrieved from a database. The string is passed
  187. as the first
  188. parameter to the constructor and must start with the
  189. characters
  190. <emphasis>'&lt;?xml'</emphasis>
  191. :
  192. </para>
  193. <programlisting language="xml"><![CDATA[
  194. $string = <<<EOT
  195. <?xml version="1.0"?>
  196. <config>
  197. <production>
  198. <db>
  199. <adapter value="pdo_mysql"/>
  200. <params>
  201. <host value="db.example.com"/>
  202. </params>
  203. </db>
  204. </production>
  205. <staging extends="production">
  206. <db>
  207. <params>
  208. <host value="dev.example.com"/>
  209. </params>
  210. </db>
  211. </staging>
  212. </config>
  213. EOT;
  214. $config = new Zend_Config_Xml($string, 'staging');
  215. ]]></programlisting>
  216. </note>
  217. <note>
  218. <title>Zend_Config XML namespace</title>
  219. <para>
  220. <classname>Zend_Config</classname>
  221. comes with it's own
  222. <acronym>XML</acronym>
  223. namespace, which adds additional functionality to the parsing process. To take advantage
  224. of it, you have to define a namespace with the namespace
  225. <acronym>URI</acronym>
  226. <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename>
  227. in
  228. your config root node.
  229. </para>
  230. <para>
  231. With the namespace enabled, you can now use
  232. <acronym>PHP</acronym>
  233. constants within
  234. your configuration files. Additionally, the
  235. <emphasis>extends</emphasis>
  236. attribute was moved to the new namespace and is deprecated in the
  237. <constant>NULL</constant>
  238. namespace. It will be completly removed there in
  239. Zend Framework 2.0.
  240. </para>
  241. <programlisting language="xml"><![CDATA[
  242. $string = <<<EOT
  243. <?xml version="1.0"?>
  244. <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  245. <production>
  246. <includePath>
  247. <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
  248. <db>
  249. <adapter value="pdo_mysql"/>
  250. <params>
  251. <host value="db.example.com"/>
  252. </params>
  253. </db>
  254. </production>
  255. <staging zf:extends="production">
  256. <db>
  257. <params>
  258. <host value="dev.example.com"/>
  259. </params>
  260. </db>
  261. </staging>
  262. </config>
  263. EOT;
  264. define('APPLICATION_PATH', dirname(__FILE__));
  265. $config = new Zend_Config_Xml($string, 'staging');
  266. echo $config->includePath; // Prints "/var/www/something/library"
  267. ]]></programlisting>
  268. </note>
  269. </sect1>
  270. <!--
  271. vim:se ts=4 sw=4 et:
  272. -->