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.).
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);
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_Configest en lecture seule. Passer cette option àtrueautorisera la modification de l'objet. - skip_extends
-
Par défaut, à chaque fois qu'une section étend une autre,
Zend_Configregroupera cette section avec son parent. Utiliser le booléentruepour cette option désactivera ce comportement, la configuration de la section sera telle-quelle. - ignore_constants
-
Par défaut,
Zend_Config_Yamlremplacera toutes les constantes trouvées dans le fichier par leurs valeurs respectives. Passez le booléentrueà cette option pour désactiver cette fonctionnalité. - yaml_decoder
-
Par défaut,
Zend_Config_Yamlutilise 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.
-
__construct( $yaml, $section = null, $options = false ); -
Constructeur.
$yamldoit pointer vers un fichier YAML valide. Si$sectionest précisé, seule la section indiquée sera analysée.$optionsest 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'optionignore_constants.) -
ignoreConstants( ); -
Cette méthode statique retourne la valeur actuelle de
ignore_constants.
Exemple 123. 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'))
);