Tabla de contenidos
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_ArrayZend_Config_Writer_IniZend_Config_Writer_JsonZend_Config_Writer_XmlZend_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();
![]() |
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.
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_Initiene 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 porZend_Config_Inipor defecto.
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.
![[Note]](images/note.png)