# Zend_Config_Yaml

## Aperçu

YAML est un acronyme récursif signifiant "YAML Ain't Markup Language", et peuyt se résumer en "standard de sérialization de données human friendly pour tous les langages de programmation." Il est souvent utilisé pour la configuration d'applications.

`Zend_Config_Yaml` est une petite extensions de `Zend_Config`. Il inclut un analyseur capable de reconnaître la syntaxe YAML utilisées pour des besoins de configuration et permet de préciser d'autres analyseurs à utiliser pour le support de syntaxes complexes (e.g., ext/syck, spyc, sfYaml, etc.).

## Démarrage rapide

Voici une version YAML de la configuration d'une application standard.

    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

Pour l'utiliser, instanciez simplement `Zend_Config_Yaml` en lui indiquant le chemin vers ce fichier ainsi que la section à charger. Par défaut, les constantes trouvées dans les valeurs seront substituées par leurs valeurs.

    $config = new Zend_Config_Yaml(
        APPLICATION_PATH . '/configs/application.yaml',
        APPLICATION_ENV
    );

Une fois instancié, l'utilisation est classique, comme un objet de configuration.

    $db = Zend_Db::factory($config->resources->db);

## Options de configuration

Les options suivantes peuvent être passées comme clés au troisième paramètre `$options` du constructeur.

### Zend_Config_Yaml Options

allow_modifications

  Par défaut, `Zend_Config` est en lecture seule. Passer cette option à `true` autorisera la modification de l'objet.

skip_extends

  Par défaut, à chaque fois qu'une section étend une autre, `Zend_Config` regroupera cette section avec son parent. Utiliser le booléen `true` pour cette option désactivera ce comportement, la configuration de la section sera telle-quelle.

ignore_constants

  Par défaut, `Zend_Config_Yaml` remplacera toutes les constantes trouvées dans le fichier par leurs valeurs respectives. Passez le booléen `true` à cette option pour désactiver cette fonctionnalité.

yaml_decoder

  Par défaut, `Zend_Config_Yaml` utilise une analyseur interne, `Zend_Config_Yaml::decode()`, pour analyser et traiter les fichiers YAML. Vous pouvez préciser une fonction de callback à utiliser comme analyseur externe via cette option.

## Méthodes disponibles

`__construct` $yaml, $section = null, $options = false

  Constructeur. `$yaml` doit pointer vers un fichier YAML valide. Si `$section` est précisé, seule la section indiquée sera analysée. `$options` est documenté dans la section options.

`decode` $yaml

  Analyse et transforme une chaîne YAML en un tableau PHP.

`setIgnoreConstants` $flag

  Cette méthode statique est utilisée pour changer le comportement global de l'analyse des constantes trouvées dans les fichiers YAML. Par défaut, les constantes sont remplacées par leurs valeurs. Passer le booléen `true` à cette méthode surchargera ce comportement. (Vous pouvez changer le comportement par instance en utilisant l'option `ignore_constants`.)

`ignoreConstants`

  Cette méthode statique retourne la valeur actuelle de `ignore_constants`.

## Exemples

### Utiliser Zend_Config_Yaml avec sfYaml

Comme précisé dans la section des options , `Zend_Config_Yaml` vous permet de spécifier votre propre analyseur YAML.

sfYaml est un Symfony component qui implémente un analyseur YAML complet pour PHP, et inclus des fonctionnalités additionnelles comme l'analyse d'expressions PHP incluses dans du YAML. Dans cet exemple, nous utilisons `sfYaml::load()` comme méthode callback pour le décodage du YAML. (Note: ceci suppose que la classe `sfYaml` est déja chargée ou disponible pour auto-chargement.)

    $config = new Zend_Config_Yaml(
        APPLICATION_PATH . '/configs/application.yaml',
        APPLICATION_ENV,
        array('yaml_decoder' => array('sfYaml', 'load'))
    );