TigerZF
🌐Español

21.6. Zend_Config_Yaml

21.6.1. Resumen

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.).

21.6.2. Inicio rápido

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);

21.6.3. Opciones de configuración

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_Config es marcar el objeto como inmutable una vez cargado. Al pasar este indicador con un valor booleano true se habilitarán las modificaciones al objeto.

skip_extends

Por defecto, cada vez que una sección extiende a otra, Zend_Config fusionará la sección con la sección que extiende. Especificar un valor booleano true para 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_Yaml reemplazará los nombres de constantes encontrados en los valores por el valor de la constante definida. Puede pasar un valor booleano true a esta opción para deshabilitar esta funcionalidad.

yaml_decoder

Por defecto, Zend_Config_Yaml utiliza 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.

21.6.4. Métodos disponibles

__construct($yaml, $section = null, $options = false);

Constructor. $yaml debe 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. $options se 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 true a este método sobrescribirá ese comportamiento. (También puede sobrescribirlo por instancia mediante la opción ignore_constants.)

ignoreConstants();

Este método estático le proporciona el valor actual del indicador ignore_constants.

21.6.5. Ejemplos

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'))
);