TigerZF
🌐Español

Capítulo 22. Zend_Config_Writer

22.1. Zend_Config_Writer

Zend_Config_Writer le da la capacidad de escribir archivos de configuración a partir de objetos Zend_Config. Funciona con un sistema sin adaptadores y por lo tanto es muy fácil de usar. Por defecto Zend_Config_Writer viene con cuatro adaptadores, que son todos basados en archivos. Se instancia un escritor con opciones específicas, que pueden ser filename y config. Luego se llama al método write() del escritor y el archivo de configuración se crea. También puede pasar $filename y $config directamente al método write(). Actualmente los siguientes escritores se incluyen con Zend_Config_Writer:

  • Zend_Config_Writer_Array

  • Zend_Config_Writer_Ini

  • Zend_Config_Writer_Json

  • Zend_Config_Writer_Xml

  • Zend_Config_Writer_Yaml

Al modificar o crear un objeto Zend_Config, hay algunas cosas que hay que saber. Para crear o modificar un valor, simplemente se establece el parámetro del objeto Zend_Config mediante el acceso al parámetro (->). Para crear una sección en la raíz o para crear una rama, simplemente se crea un nuevo array ("$config->branch = array();"). Para definir qué sección extiende a otra, se llama al método setExtend() en el objeto raíz Zend_Config.

Ejemplo 22.1. Uso de Zend_Config_Writer

Este ejemplo ilustra el uso básico de Zend_Config_Writer_Xml para crear un nuevo archivo de configuración:

// Create the config object
$config = new Zend_Config(array(), true);
$config->production = array();
$config->staging    = array();

$config->setExtend('staging', 'production');

$config->production->db = array();
$config->production->db->hostname = 'localhost';
$config->production->db->username = 'production';

$config->staging->db = array();
$config->staging->db->username = 'staging';

// Write the config file in one of the following ways:
// a)
$writer = new Zend_Config_Writer_Xml(array('config'   => $config,
                                           'filename' => 'config.xml'));
$writer->write();

// b)
$writer = new Zend_Config_Writer_Xml();
$writer->setConfig($config)
       ->setFilename('config.xml')
       ->write();

// c)
$writer = new Zend_Config_Writer_Xml();
$writer->write('config.xml', $config);

Esto creará un archivo de configuración XML con las secciones production y staging, donde staging extiende a production.


Ejemplo 22.2. Modificación de una configuración existente

Este ejemplo demuestra cómo editar un archivo de configuración existente.

// Load all sections from an existing config file, while skipping the extends.
$config = new Zend_Config_Ini('config.ini',
                              null,
                              array('skipExtends'        => true,
                                    'allowModifications' => true));

// Modify a value
$config->production->hostname = 'foobar';

// Write the config file
$writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                           'filename' => 'config.ini'));
$writer->write();

[Note] Carga de un archivo de configuración

Al cargar un archivo de configuración existente para modificaciones es muy importante cargar todas las secciones y omitir los extends, de manera que no se combinen valores. Esto se hace pasando skipExtends como opción al constructor.

Para todos los escritores basados en archivos (INI, JSON, XML, YAML, y array PHP) internamente se usa render() para construir la cadena de configuración. Este método puede usarse de forma independiente para acceder a la representación en cadena de la información de configuración.

22.1.1. Notas específicas para el escritor INI

  • El escritor INI tiene dos modos de renderizado respecto a las secciones. Por defecto la configuración de nivel superior siempre se escribe en nombres de sección. Al llamar a $writer->setRenderWithoutSections(); todas las opciones se escriben en el espacio de nombres global del archivo INI y no se aplican secciones.

  • Zend_Config_Writer_Ini tiene un parámetro de opción adicional nestSeparator, que define con qué carácter se separan los nodos individuales. El valor por defecto es un único punto, que es aceptado por Zend_Config_Ini por defecto.

22.1.2. Notas específicas para el escritor YAML

El escritor YAML le permite especificar opcionalmente un codificador YAML alternativo para usar. Por defecto, se incluye uno con el framework que es adecuado para la mayoría de las tareas de configuración. Si lo encuentra insuficiente, o desea usar YAML más avanzado, puede proporcionar un callback de codificador alternativo.

El método para hacerlo es usar el método Zend_Config_Writer_Yaml::setYamlEncoder(), pasándole un callback válido.

// Use the Symfony Yaml Component:
$writer = new Zend_Config_Writer_Yaml($filename);
$writer->setYamlEncoder(array('sfYaml', 'dump'));

Lo anterior usa el componente sfYaml de los componentes de Symfony para codificar la configuración a YAML.