Magazine Internet

Manipuler les paramètres de configuration dans symfony

Publié le 09 décembre 2009 par Mcherifi

Manipuler les paramètres de configuration dans symfonyDans symfony, tous les paramètres de configuration sont stockés dans des fichiers .yml (settings.yml, app.yml, module.yml, logging.yml, and i18n.yml), ceux-ci sont accessibles via une classe spéciale sfConfig, certains sont automatiquement utilisés dans le framework!
Lors du développement d'une application/module symfony, on peut définir des paramètres de configuration spécifiques à notre application, l'objectif de ce tutoriel est d'expliquer comment récupérer/modifier les valeurs de ces variables !

Exemple de fichier de configuration

On considère que le nom de l'application est frontend, et le fichier de configuration de l'application /apps/frontend/config/app.yml

all:
  categoryPages:
    maxPages: 10  
  productPages:
    maxPages: 5
  generalMax: 15

Récupérer une valeur

echo sfConfig::get('app_categoryPages_maxPages'); // => 10
echo sfConfig::get('app_productPages_maxPages'); // => 5
echo sfConfig::get('app_generalMax'); // => 15

Symfony utilise le format YAML pour tous ses fichiers de configuration grâce à sa syntaxe simple et efficace, les données sont représentées par une combinaison de listes, tableaux (de hachage) et données scalaires.

L'accès à une variable se fait via la méthode get() de la classe sfConfig, il suffit d'indiquer le chemin permettant d'accéder à la variable, on respectant ces petites règles :

  • Le premier paramètre corrépond au nom d'un fichier de configuration sans le .yml (settings, app, module, logging, i18n..), ces fichiers se trouve dans le répertoire /apps/NOMAPPLICATION/config/
  • Il ne faut pas mentionner le " all " ou " default " dans la méthode sfConfig::get()
  • Séparez les paramètres par des " _ " en respectant arborescence selon le fichier .yml
  • Il est préférable de ne pas utilisé des " _ " dans le nom des paramètres pour éviter un éventuel conflit

Modifier la valeur d'un paramètre " on the fly "

La méthode set de la classe sfConfig permet la modification de la valeur d'un paramètre de configuration, cette modificationn'est pas permanente, et n'affecte pas le fichier de configuration concerné:
Exemple :

sfConfig::set('sf_timeout', 86400);

Modifier un paramètre dans le fichier yml

Par défaut, symfony ne gère pas l'écriture dans les fichiers de configuration, il n'y a donc pas de méthode save() dans la classe sfConfig, néanmoins il fourni d'autre méthodes permettant la réalisation de cette tache:

Exemple :

Modifier app_categoryPages_maxPages dans /apps/frontend/config/app.yml

all:
  categoryPages:
    maxPages: 10  
  productPages:
    maxPages: 5
  generalMax: 15

Dans actions.class.php

$app_config_file = sfConfig::get('sf_app_config_dir')."/app.yml";
$config_values = sfYaml::load($app_config_file);
$config_values['all']['categoryPages']['imap_maxPages'] = 20; // à titre d'exemple
$content = sfYaml::dump($config_values);
file_put_contents($app_config_file, $content);

sfYaml::load() retourne un tableau associatif contenant les paramètres de configuration du fichier passé en paramètre, sfYaml::dump() permet de génerer le code YAML à partir d'un tableau sur-lequel on a effectué nos modifications. sans oublier que le chemin du fichier en question doit être inscriptible (+w) pour permettre l'écriture des nouveaux paramètres

Pourquoi symfony ne gère pas l'écriture dans les fichiers YML?

Je vous rassure, ce n'est pas un oubli ;) au début ça m'a fait un peu bizarre mais voilà pourquoi :

  • Dans symfony, les paramètres de configuration ne découlent pas d'un seul fichier mais de plusieurs fichiers yml (en cascade), on saura pas lequel des fichiers modifier
  • Sur un serveur de développement, tous les fichiers YAML sont version-nés, si ceux-ci sont édités, il y aura des conflits au moment de mettre à jour par le biais du SVN/GIT
  • Les fichiers YAML ne sont pas destinés à être modifiés dynamiquement surtout dans un projets collaboratif (sauf cas particulier)

Un grand merci à Charles, Jérôme et François qui m'ont éclairci les idées à ce sujet =)

Voilà, ce billet touche à sa fin, à très bientôt ;)

    Manipuler les paramètres de configuration dans symfony

Leave a Reply


Retour à La Une de Logo Paperblog

A propos de l’auteur


Mcherifi 1185 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine