L'approccio a componenti di
ci consente di personalizzare i singoli componenti in maniera molto semplice. Fino alla versione 3 del framework tutte le configurazioni di Symfony e dei relativi bundle esterni aggiunti si trovavano all'interno di un singolo file config.yml
. Dalla versione 4 in poi, invece, la direzione presa è verso il divide et impera, ovvero nello scompattare in differenti file le configurazioni in modo da facilitarne la gestione e la manutenzione.
Se apriamo la directory app/config
noteremo diversi file Yaml di configurazione (es. routing, mailer, notifier, ecc.) ma anche delle directory:
packages/
: contiene le configurazioni dei singoli packages aggiunti con singoli Flex;routes/
: contiene le definizioni delle rotte.
Entrambe le directory hanno al loro interno dei file Yaml ma anche delle directory con i nomi degli environment definiti. Nella maggior parte dei casi, quindi, avremo delle directory dev|test|prod
. Questo avviene poiché Symfony ci consente di personalizzare ed estendere delle impostazioni generiche in maniera puntuale per ogni singolo ambiente di sviluppo.
Vediamo l'esempio di monolog
, il package usato per gestire i log applicativi. All'interno del file app/config/packages/dev/monolog.yaml
troviamo una configurazione con un livello di log definito a debug
, mentre lo stesso file all'interno della directory prod
ha, tra le varia configurazioni, lo stesso valore definito a error
.
Cosa vuol dire nel nostro caso? Che, mentre nell'ambiente di sviluppo logghiamo qualsiasi cosa accade all'interno della nostra applicazione così da velocizzare il debug, nell'ambiente di produzione logghiamo solo se il livello definito è superiore o uguale all'errore.
Nel caso non si conoscessero i livelli di debug di Monolog sono qui riportati in ordine crescente di importanza:
DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY
Accedere alle variabili d'ambiente
Nella lezione precedente abbiamo visto come definire delle variabili d'ambiente in base all'environment di riferimento. Tali variabili possono essere utilizzate all'interno dei file di configurazione come nel file app/config/mailer.yaml
:
framework:
mailer:
dsn: '%env(MAILER_DSN)%'
Nell'esempio appena mostrato sarà presente una variabile d'ambiente con nome MAILER_DSN
all'interno di uno dei file .env
.
Definire parametri
Un altro modo per passare dei parametri di configurazione a più file è l'utilizzo dei parameters
. Per convenzione tali parametri vengono definiti all'interno del file app/config/services.yaml
sotto la chiave parameters
. Ad esempio:
parameters:
emails:
admin: myfantasticemail@google.com
support: supportmyfantasticemail@google.com
Una volta definito, il parametro è utilizzabile all'interno dei vari file di configurazione nel seguente modo:
my_service:
my_configuration:
my_configurable_setting: "%emails.admin%"
È sufficiente, quindi, racchiudere la proprietà all'interno delle percentuali e, in fase di inizializzazione di Symfony, il parametro verrà automaticamente ricostruito.