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_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éentrue
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éentrue
à 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.
-
__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'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')) );