| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?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 a los desarrolladores almacenar
- datos de configuración en un formato sencillo
- <acronym>XML</acronym>
- y leerlos a través de
- una sintáxis de propiedades de objetos anidados. El elemento raíz del
- archivo
- <acronym>XML</acronym>
- es irrelevante y puede ser nombrado arbitrariamente.
- El primer nivel de elementos
- <acronym>XML</acronym>
- corresponde con las secciones de datos
- de configuración. El formato
- <acronym>XML</acronym>
- admite organización jerárquica a
- través del anidamiento de elementos
- <acronym>XML</acronym>
- bajo los elementos a nivel de
- sección. El contenido de un elemento
- <acronym>XML</acronym>
- a nivel de hoja corresponde al
- valor de un dato de configuración. La herencia de sección está
- permitida
- por un atributo
- <acronym>XML</acronym>
- especial llamado
- <emphasis>extends</emphasis>
- , y el valor de
- este atributo se corresponde con la sección de la cual los datos son
- heredados por la sección extendida..
- </para>
- <note>
- <title>Tipo devuelto</title>
- <para>
- Los datos de configuración que se leen en
- <classname>Zend_Config_Xml</classname>
- son siempre devueltos como strings.
- La conversión de datos de string a otros tipos se deja en manos de los
- desarrolladores para que se ajuste a sus necesidades particulares.
- </para>
- </note>
- <example id="zend.config.adapters.xml.example.using">
- <title>Usando Zend_Config_Xml</title>
- <para>
- Este ejemplo ilustra un uso básico de
- <classname>Zend_Config_Xml</classname>
- para cargar datos de configuración de un archivo
- <acronym>XML</acronym>
- . En este ejemplo
- hay datos de configuración tanto para un sistema de producción como
- para un sistema de pruebas. Debido a que los datos de configuración del
- sistema de pruebas son muy similares a los de producción, la sección de
- pruebas hereda de la sección de producción. En este caso, la decisión
- es arbitraria y podría haberse escrito a la inversa, con la sección de
- producción heredando de la sección de pruebas, a pesar de que éste no
- sería el caso para situaciones más complejas. Suponga, pues, que los
- datos de configuración siguientes están contenidos
- en
- <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>
- Ahora, asuma que el desarrollador de aplicaciones necesita los datos
- de configuración de
- la fase de pruebas del archivo
- <acronym>XML</acronym>
- . Es una tarea
- sencilla cargar estos datos, especificando el archivo
- <acronym>XML</acronym>
- y la
- sección de pruebas:
- </para>
- <programlisting language="php"><![CDATA[
- $config = new Zend_Config_Xml('/ruta/de/config.xml', 'pruebas');
- echo $config->database->params->host; // muestra "dev.example.com"
- echo $config->database->params->dbname; // muestra "dbname"
- ]]></programlisting>
- </example>
- <example id="zend.config.adapters.xml.example.attributes">
- <title>Usando atributos de etiqueta en Zend_Config_Xml</title>
- <para>
- Zend_Config_Xml también soporta dos formas adicionales de definir
- nodos en la
- configuración. Ambas hacen uso de atributos. Dado que
- los atributos
- <emphasis>extends</emphasis>
- y
- <emphasis>value</emphasis>
- son palabras
- reservadas (la última por la segunda manera de usar atributos),
- pueden no ser
- utilizadas.
- La primera manera de utilizar atributos es añadir atributos en un
- nodo padre, el cual será
- interpretado como hijo de ese nodo:
- </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>
- La otra forma no reduce la configuración, sino que permite mantenerla de
- forma más fácil dado que no es necesario escribir el nombre de la
- etiqueta dos veces. Simplemente, cree una etiqueta vacía con el valor en
- el 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>XML strings</title>
- <para>
- <classname>Zend_Config_Xml</classname>
- is able to load an
- <acronym>XML</acronym>
- string directly,
- such as that retrieved from a database. The string is passed
- as the first
- parameter to the constructor and must start with the
- characters
- <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>Zend_Config XML namespace</title>
- <para>
- <classname>Zend_Config</classname>
- comes with it's own
- <acronym>XML</acronym>
- namespace, which adds additional functionality to the parsing process. To take advantage
- of it, you have to define a namespace with the namespace
- <acronym>URI</acronym>
- <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename>
- in
- your config root node.
- </para>
- <para>
- With the namespace enabled, you can now use
- <acronym>PHP</acronym>
- constants within
- your configuration files. Additionally, the
- <emphasis>extends</emphasis>
- attribute was moved to the new namespace and is deprecated in the
- <constant>NULL</constant>
- namespace. It will be completly removed there in
- 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:
- -->
|