YAML es un acrónimo recursivo que significa "YAML Ain't Markup Language", y pretende ser un "estándar de serialización de datos amigable para el ser humano válido para todos los lenguajes de programación." Se utiliza a menudo para la configuración de aplicaciones.
Zend_Config_Yaml es una extensión ligera de
Zend_Config. Incluye un parser capaz de
reconocer la sintaxis YAML más común utilizada para fines de configuración, y permite
especificar otros parsers si desea una sintaxis más compleja (por ejemplo, ext/syck, spyc,
sfYaml, etc.).
A continuación se muestra una versión YAML de una configuración de aplicación estándar.
production:
phpSettings:
display_startup_errors: false
display_errors: false
includePaths:
library: APPLICATION_PATH/../library
bootstrap:
path: APPLICATION_PATH/Bootstrap.php
class: "Bootstrap"
appnamespace: "Application"
resources:
frontController:
controllerDirectory: APPLICATION_PATH/controllers
moduleDirectory: APPLICATION_PATH/modules
params:
displayExceptions: false
modules:
db:
adapter: "pdo_sqlite"
params:
dbname: APPLICATION_PATH/../data/db/application.db
layout:
layoutPath: APPLICATION_PATH/layouts/scripts/
staging:
_extends: production
testing:
_extends: production
phpSettings:
display_startup_errors: true
display_errors: true
development:
_extends: production
phpSettings:
display_startup_errors: true
display_errors: true
resources:
frontController:
params:
displayExceptions: true
Para utilizarlo, simplemente debe instanciar Zend_Config_Yaml, apuntando
a la ubicación de este archivo e indicando la sección del archivo a cargar. Por
defecto, los nombres de constantes encontrados en los valores se sustituirán por sus
valores correspondientes.
$config = new Zend_Config_Yaml(
APPLICATION_PATH . '/configs/application.yaml',
APPLICATION_ENV
);
Una vez instanciado, se utiliza como cualquier otro objeto de configuración.
$db = Zend_Db::factory($config->resources->db);
Las siguientes opciones pueden pasarse como claves al tercer argumento del constructor,
$options.
Opciones de Zend_Config_Yaml
- allow_modifications
El comportamiento por defecto de
Zend_Configes marcar el objeto como inmutable una vez cargado. Al pasar este indicador con un valor booleanotruese habilitarán las modificaciones al objeto.- skip_extends
Por defecto, cada vez que una sección extiende a otra,
Zend_Configfusionará la sección con la sección que extiende. Especificar un valor booleanotruepara esta opción deshabilitará esta funcionalidad, proporcionándole solo la configuración definida explícitamente en esa sección.- ignore_constants
Por defecto,
Zend_Config_Yamlreemplazará los nombres de constantes encontrados en los valores por el valor de la constante definida. Puede pasar un valor booleanotruea esta opción para deshabilitar esta funcionalidad.- yaml_decoder
Por defecto,
Zend_Config_Yamlutiliza un decodificador integrado,Zend_Config_Yaml::decode(), para analizar y procesar archivos YAML. Puede especificar un callback alternativo para usar en lugar del integrado mediante esta opción.
-
__construct($yaml, $section = null, $options = false); Constructor.
$yamldebe hacer referencia a una ubicación válida en el sistema de archivos que contenga un archivo de configuración YAML.$section, si se especifica, indica una sección concreta del archivo de configuración a utilizar.$optionsse explica en la sección de opciones.-
decode($yaml); Analiza una cadena YAML y la convierte en un array de PHP.
-
setIgnoreConstants($flag); Esta función estática puede utilizarse para sobrescribir globalmente la configuración por defecto de cómo se gestionan las constantes encontradas en las cadenas YAML. Por defecto, los nombres de constantes se reemplazan por los valores de constante correspondientes; pasar un valor booleano
truea este método sobrescribirá ese comportamiento. (También puede sobrescribirlo por instancia mediante la opciónignore_constants.)-
ignoreConstants(); Este método estático le proporciona el valor actual del indicador
ignore_constants.
Ejemplo 21.6. Uso de Zend_Config_Yaml con sfYaml
Como se indica en la sección
de opciones, Zend_Config_Yaml le permite especificar un
parser YAML alternativo al instanciar.
sfYaml es un componente de Symfony que
implementa un parser YAML completo en PHP, e incluye una serie de funcionalidades
adicionales, incluyendo la capacidad de analizar expresiones PHP incrustadas en el YAML. En
este ejemplo, utilizamos el método sfYaml::load() como callback
decodificador de YAML. (Nota: esto asume que la clase
sfYaml ya está cargada o disponible mediante
autocarga.)
$config = new Zend_Config_Yaml(
APPLICATION_PATH . '/configs/application.yaml',
APPLICATION_ENV,
array('yaml_decoder' => array('sfYaml', 'load'))
);