Configuration de Symfony (et des environnements)

Les applications Symfony peuvent installer des packages tiers (bundles, bibliothèques, etc.) pour intégrer de nouvelles fonctionnalités ( services ) à votre projet. Chaque paquet peut être personnalisé via des fichiers de configuration qui, par défaut, se config/ dans le répertoire config/ .

Configuration: config / packages /

La configuration de chaque paquet peut être trouvée dans config/packages/ . Par exemple, le bundle de framework est configuré dans config/packages/framework.yaml :

  • YAML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
     # config/packages/framework.yaml
    framework :
        secret : '%env(APP_SECRET)%'
        #default_locale: en
        #csrf_protection: ~
        #http_method_override: true
        #trusted_hosts: ~
        # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
        #session:
        #    # The native PHP session handler will be used
        #    handler_id: ~
        #esi: ~
        #fragments: ~
        php_errors :
            log : true
    
  • XML
     
  • PHP
     

La clé de niveau supérieur (ici framework ) référence la configuration pour un bundle spécifique ( FrameworkBundle dans ce cas).

 

Formats de configuration

Tout au long de la documentation, tous les exemples de configuration seront affichés dans trois formats (YAML, XML et PHP). YAML est utilisé par défaut, mais vous pouvez choisir ce que vous préférez. Il n'y a pas de différence de performance:

  • Le format YAML : Simple, propre et lisible;
  • XML : plus puissant que YAML à certains moments et supporte l'auto-complétion IDE;
  • PHP : Très puissant mais moins lisible que les formats de configuration standard.

Configuration Reference & Dumping

Il y a deux façons de savoir quelles touches vous pouvez configurer:

  1. Utilisez la section de référence ;
  2. Utilisez la commande config:dump-reference .

Par exemple, si vous voulez configurer quelque chose en rapport avec le bundle de framework, vous pouvez voir un exemple de sauvegarde de toutes les options de configuration disponibles en exécutant:

  php bin/console config:dump-reference framework

Les paramètres Key: Paramètres (Variables)

La configuration comporte des touches spéciales de niveau supérieur. L'un d'entre eux s'appelle des parameters : il est utilisé pour définir des variables qui peuvent être référencées dans n'importe quel autre fichier de configuration. Par exemple, lorsque vous installez le package de traduction , un locale paramètres locale est ajouté à config/services.yaml :

  • YAML
    1
    2
    3
    4
    5
     # config/services.yaml
    parameters :
        locale : en
    
    # ...
    
  • XML
     
  • PHP
     

Ce paramètre est ensuite référencé dans le config du framework dans config/packages/translation.yaml :

  • YAML
    1
    2
    3
    4
    5
    6
     # config/packages/translation.yaml
    framework :
        # any string surrounded by two % is replaced by that parameter value
        default_locale : '%locale%'
    
        # ...
    
  • XML
     
  • PHP
     

Vous pouvez définir n'importe quel nom de paramètre sous la clé de parameters d'un fichier de configuration. Pour référencer un paramètre, entourez son nom de deux signes de pourcentage, par exemple %locale% .

 
Vous pouvez également définir des paramètres dynamiquement, comme des variables d'environnement. Voir Comment définir les paramètres externes dans le conteneur de service .

Pour plus d'informations sur les paramètres, y compris sur la façon de les référencer depuis un automate, voir Paramètres du service .

Le fichier .env et les variables d'environnement

Il y a aussi un fichier .env qui est chargé. Son contenu devient des variables d'environnement dans l'environnement de développement, ce qui facilite la référence des variables d'environnement dans votre code. Lorsque vous installez des packages, plusieurs variables d'environnement sont ajoutées à ce fichier. Mais vous pouvez également ajouter vos propres variables.

Les variables d'environnement peuvent être référencées dans d'autres fichiers de configuration en utilisant une syntaxe spéciale. Par exemple, si vous installez le package de doctrine , vous aurez une variable d'environnement appelée DATABASE_URL dans votre fichier .env . Ceci est référencé dans config/packages/doctrine.yaml :

1
2
3
4
5
6
7
 # config/packages/doctrine.yaml
doctrine :
    dbal :
        url : '%env(DATABASE_URL)%'

        # the resolve: prefix will resolve parameters *inside* the env variable
        # url: '%env(resolve:DATABASE_URL)%'

Pour plus de détails sur les variables d'environnement, voir Variables d'environnement .

Le fichier .env est spécial, car il définit les valeurs qui changent habituellement sur chaque serveur. Par exemple, les informations d'identification de la base de données sur votre ordinateur de développement local peuvent être différentes de celles de vos collègues de travail. C'est pourquoi ce fichier n'est pas validé dans le référentiel partagé et n'est stocké que sur votre machine. En fait, le fichier .gitignore fourni avec Symfony l'empêche d'être .gitignore .

Cependant, un fichier .env.dist est .env.dist (avec des valeurs factices). Ce fichier n'est pas lu par Symfony: c'est juste une référence pour que Symfony sache quelles variables doivent être définies dans le fichier .env . Si vous ajoutez ou supprimez des clés à .env , ajoutez-les ou supprimez-les de .env.dist aussi, afin que les deux fichiers soient toujours synchronisés.

Environnements et autres fichiers de configuration

Vous avez juste une application, mais que vous le réalisiez ou non, vous avez besoin de se comporter différemment à différents moments:

  • Pendant le développement , vous voulez que votre application enregistre tout et expose de bons outils de débogage;
  • Après le déploiement en production , vous souhaitez que la même application soit optimisée pour la vitesse et ne consigner que les erreurs.

Comment pouvez-vous faire qu'une application se comporte de deux manières différentes? Avec des environnements .

Vous avez probablement déjà utilisé l'environnement de développement sans même le savoir. Après le déploiement, vous utiliserez l'environnement prod .

Pour en savoir plus sur l' exécution et le contrôle de chaque environnement, voir Comment maîtriser et créer de nouveaux environnements .

Continue!

Toutes nos félicitations! Vous avez abordé les bases de Symfony. Ensuite, découvrez chaque partie de Symfony en suivant les guides. Check-out:

Et les nombreux autres sujets.

En savoir plus