Zend_Config_Xml permite a los desarrolladores almacenar datos de configuración en un
formato XML simple y leerlos mediante sintaxis de propiedades de objetos anidados. El
elemento raíz del archivo o cadena XML es irrelevante y puede nombrarse
de forma arbitraria. El primer nivel de elementos XML corresponde a las
secciones de datos de configuración. El formato XML soporta organización
jerárquica mediante el anidamiento de elementos XML por debajo de los elementos
de nivel de sección. El contenido de un elemento XML de nivel hoja corresponde al
valor de un dato de configuración. La herencia de secciones se soporta mediante un atributo
XML especial llamado extends, y el valor de este
atributo corresponde a la sección de la cual la sección que extiende heredará los datos.
![]() |
Tipo de retorno |
|---|---|
Los datos de configuración leídos en |
Ejemplo 21.4. Uso de Zend_Config_Xml
Este ejemplo ilustra un uso básico de Zend_Config_Xml para
cargar datos de configuración desde un archivo XML. En este ejemplo hay
datos de configuración tanto para un sistema de producción como para un sistema de staging. Debido a que
los datos de configuración del sistema de staging son muy similares a los de producción, la
sección de staging hereda de la sección de producción. En este caso, la decisión es
arbitraria y podría haberse escrito al revés, con la sección de producción
heredando de la sección de staging, aunque esto puede no ser así para situaciones más complejas.
Suponga, entonces, que los siguientes datos de configuración están contenidos en
/path/to/config.xml:
<?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>
A continuación, suponga que el desarrollador de la aplicación necesita los datos de configuración de staging del archivo XML. Es sencillo cargar estos datos especificando el archivo XML y la sección de staging:
$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"
Ejemplo 21.5. Uso de atributos de etiqueta en Zend_Config_Xml
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
extends y value son palabras clave
reservadas (la segunda por la segunda forma de usar atributos), no pueden
usarse. La primera forma de hacer uso de atributos es agregar atributos en un nodo
padre, que luego se traducirán en hijos de ese nodo:
<?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>
La otra forma no acorta realmente la configuración, pero es más fácil de mantener ya que no tiene que escribir el nombre de la etiqueta dos veces. Simplemente crea una etiqueta vacía con el valor en el atributo value:
<?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>
![]() |
Cadenas XML |
|---|---|
|
$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');
|
![]() |
Espacio de nombres XML de Zend_Config |
|---|---|
|
Con el espacio de nombres habilitado, ahora puede usar constantes de PHP dentro
de sus archivos de configuración. Además, el atributo extends
se trasladó al nuevo espacio de nombres y está obsoleto en el
espacio de nombres
$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"
|
![[Note]](images/note.png)