Principes des fichiers de configuration

Les fichiers de configuration de symfony sont basés sur un ensemble commun de principes et partagent quelques propriétés communes. Cette section les décrit en détail, et sert de référence pour les autres sections décrivant les fichiers de configuration YAML.

Cache

Tous les fichiers de configuration de symfony sont mis en cache dans des fichiers PHP par les classes de gestionnaire de configuration. Quand le paramètre is_debug est mis à false (par exemple pour l'environnement de prod), le fichier YAML est seulement consulté lors de la première requête, le cache PHP est utilisé pour les requêtes suivantes. Cela signifie que le "lourd" travail est fait qu'une seule fois, lorsque le fichier YAML est analysé et interprété la première fois.

Dans l'environnement de dev, où is_debug est défini par défaut à true, la compilation se fait à chaque modification du fichier (symfony contrôle la date de modification du fichier).

L'analyse et la mise en cache de chaque fichier de configuration se fait par des classes spécialisées de gestionnaire de configuration, configuré en config_handler.yml.

Dans les sections suivantes, lorsque nous parlons de "compilation", cela décrit la première fois que le fichier YAML est converti en un fichier PHP et stocké dans le cache.

Pour forcer le rechargement du cache de configuration, vous pouvez utiliser la tâche cache:clear :

$ php symfony cache:clear --type=config

Constantes

Les fichiers de configuration : core_compile.yml, factories.yml, generator.yml, databases.yml, filters.yml, view.yml, autoload.yml

Certains fichiers de configuration permettent l'utilisation de constantes pré-définies. Les constantes sont déclarées avec des substituants en utilisant la notation %XXX% (où XXX est une clé en majuscules) et sont remplacés par leur valeur réelle pendant la "compilation".

Paramètres de configuration

Une constante peut être n'importe quel paramètre défini dans le fichier de configuration settings.yml. La clé du substituant est le nom de la clé du paramètre en majuscule préfixé avec SF_ :

l

Quand symfony compile le fichier de configuration, il remplace toutes les occurrences de substituant %SF_XXX% par leur valeur définie dans settings.yml. Dans l'exemple ci-dessous, il remplacera le substituant SF_LOGGING_ENABLED par la valeur du paramètre logging_enabled définie dans settings.yml.

Paramètres de l'application

Vous pouvez également utiliser les paramètres définis dans le fichier de configuration app.yml en préfixant le nom de la clé avec APP_.

Constantes spéciales

Par défaut, symfony définit quatre constantes selon le contrôleur frontal actuel :

Constantes Description Méthode de configuration
~SF_APP~ L'actuel nom de l'application getApplication()
~SF_ENVIRONMENT~ L'actuel nom de environnement getEnvironment()
~SF_DEBUG~ Si le debug est activé ou non isDebug()
~SF_SYMFONY_LIB_DIR~ Le répertoire des librairies de symfony getSymfonyLibDir()

Répertoires

Les constantes sont également très utiles lorsque vous avez besoin pour faire référence à un répertoire ou un chemin de fichier sans le coder en dur. Symfony définit un certain nombre de constantes pour les répertoires communs du projet et de l'application.

La racine de la hiérarchie est la racine du répertoire du projet, SF_ROOT_DIR. Toutes les autres constantes sont dérivées de ce répertoire racine.

La structure de répertoire du projet est définie comme suit :

Constantes Valeur par défaut
~SF_APPS_DIR~ SF_ROOT_DIR/apps
~SF_CONFIG_DIR~ SF_ROOT_DIR/config
~SF_CACHE_DIR~ SF_ROOT_DIR/cache
~SF_DATA_DIR~ SF_ROOT_DIR/data
~SF_DOC_DIR~ SF_ROOT_DIR/doc
~SF_LIB_DIR~ SF_ROOT_DIR/lib
~SF_LOG_DIR~ SF_ROOT_DIR/log
~SF_PLUGINS_DIR~ SF_ROOT_DIR/plugins
~SF_TEST_DIR~ SF_ROOT_DIR/test
~SF_WEB_DIR~ SF_ROOT_DIR/web
~SF_UPLOAD_DIR~ SF_WEB_DIR/uploads

La structure de répertoire de l'application est définie dans le répertoire SF_APPS_DIR/APP_NAME :

Constantes Valeur par défaut
~SF_APP_CONFIG_DIR~ SF_APP_DIR/config
~SF_APP_LIB_DIR~ SF_APP_DIR/lib
~SF_APP_MODULE_DIR~ SF_APP_DIR/modules
~SF_APP_TEMPLATE_DIR~ SF_APP_DIR/templates
~SF_APP_I18N_DIR~ SF_APP_DIR/i18n

Enfin, la structure du répertoire du cache de l'application est définie comme suit :

Constantes Valeur par défaut
~SF_APP_BASE_CACHE_DIR~ SF_CACHE_DIR/APP_NAME
~SF_APP_CACHE_DIR~ SF_CACHE_DIR/APP_NAME/ENV_NAME
~SF_TEMPLATE_CACHE_DIR~ SF_APP_CACHE_DIR/template
~SF_I18N_CACHE_DIR~ SF_APP_CACHE_DIR/i18n
~SF_CONFIG_CACHE_DIR~ SF_APP_CACHE_DIR/config
~SF_TEST_CACHE_DIR~ SF_APP_CACHE_DIR/test
~SF_MODULE_CACHE_DIR~ SF_APP_CACHE_DIR/modules

Sensibilisation à l'environnement

Les fichiers de configuration: settings.yml, factories.yml, databases.yml, app.yml

Certains fichiers de configuration de symfony sont sensibles à l'environnement, leur interprétation dépend de l'environnement symfony actuel. Ces fichiers ont des sections différentes qui définissent une configuration différente pour chaque environnement. Lorsque vous créez une nouvelle application, symfony crée une configuration sensible pour les trois environnements par défaut de symfony : prod, test, et dev :

---
prod:
  # Configuration pour l'environnement de `prod`

test:
  # Configuration pour l'environnement de `test`

dev:
  # Configuration pour l'environnement de `dev`

all:
  # Configuration par défaut de tous les environnements

Lorsque symfony a besoin d'une valeur à partir d'un fichier de configuration, il fusionne la configuration disponible dans la section de l'environnement actuel avec la configuration all. La section spéciale all décrit la configuration par défaut pour tous les environnements. Si la section de l'environnement n'est pas définie, symfony redescend sur la configuration de all.

Configuration en cascade

Les fichiers de configuration : core_compile.yml, autoload.yml, settings.yml, factories.yml, databases.yml, security.yml, cache.yml, app.yml, filters.yml, view.yml

Certains fichiers de configuration peuvent être définis dans plusieurs sous-répertoires config/ contenus dans la structure des répertoires du projet.

Lorsque la configuration se compile, les valeurs des différents fichiers sont fusionnés selon un ordre de priorité :

  • La configuration du module (PROJECT_ROOT_DIR/apps/APP_NAME/modules/MODULE_NAME/config/XXX.yml)
  • La configuration de l'application (PROJECT_ROOT_DIR/apps/APP_NAME/config/XXX.yml)
  • La configuration du projet (PROJECT_ROOT_DIR/config/XXX.yml)
  • La configuration définie dans les plugins (PROJECT_ROOT_DIR/plugins/*/config/XXX.yml)
  • La configuration par défaut définie dans les librairies de symfony (SF_LIB_DIR/config/XXX.yml)

Par exemple, le settings.yml défini dans un répertoire de l'application hérite de la configuration définie dans le répertoire config/ principal du projet, et éventuellement de la configuration par défaut contenus dans le framework lui-même (lib/config/config/settings.yml).

Quand un fichier de configuration est sensible à l'environnement, il peut être défini dans plusieurs répertoires, la liste prioritaire suivante s'applique :

  1. Module
  2. Application
  3. Projet
  4. Environnement spécifique
  5. Tous les environnements
  6. Par défault