Caution: You are browsing the legacy symfony 1.x part of this website.
SymfonyWorld Online 2020
100% online
30+ talks + workshops
Live + Replay watch talks later

I principi dei file di configurazione

1.4
Symfony version
1.2
Language

I file di configurazione di symfony si basano su un insieme di principi comuni e condividono alcune proprietà. Questa sezione descrive tali principi in dettaglio e si propone come riferimento per le altre sezioni che descrivono i file di configurazione YAML.

Cache

Tutti i file di configurazione di symfony sono salvati nella cache come file PHP da alcune classi apposite. Quando l'impostazione is_debug è impostata a false (per esempio per l'ambiente prod), i file YAML vengono letti solo per la prima richiesta; la cache PHP viene invece utilizzata per tutte le richieste successive. Questo significa che il lavoro "duro" viene fatto una sola volta, quando il file YAML viene processato e interpretato per la prima volta.

tip

Nell'ambiente dev, dove is_debug è impostato a true in modalità predefinita, i file di configurazione vengono processati ogni volta che si registrano delle modifiche (symfony verifica la data dell'ultima modifica).

Il parsing e l'inserimento in cache di ogni file di configurazione viene eseguito da classi specializzate, configurate in config_handler.yml.

Nelle sezioni seguenti, quando parleremo di "compilazione", intenderemo che la prima volta un file YAML viene convertito in un file PHP e memorizzato nella cache.

tip

Per fare in modo che la cache dei file di configurazione venga ricaricata, è possibile usare il task cache:clear:

$ php symfony cache:clear --type=config

Costanti

File di configurazione: core_compile.yml, factories.yml, generator.yml, databases.yml, filters.yml, view.yml, autoload.yml

Alcuni file di configurazione permettono di utilizzare costanti predefinite. Le costanti sono dichiarate tramite appositi segnaposto, usando la notazione %XXX% (dove XXX è una chiave maiuscola) e sono rimpiazzate con il loro vero valore al momento della compilazione.

Impostazioni della configurazione

Una costante può essere una qualsiasi impostazione definita nel file di configurazione settings.yml. La chiave segnaposto è quindi la versione maiuscola dell'impostazione con prefisso SF_:

logging: %SF_LOGGING_ENABLED%

Quando symfony compila i file di configurazione, si occupa di sostituire tutte le occorrenze dei segnaposto %SF_XXX% con i corrispondenti valori contenuti in settings.yml. Nell'esempio qui sotto, sostituirà il segnaposto SF_LOGGING_ENABLED con il valore dell'impostazione logging_enabled definita in settings.yml.

Impostazioni dell'applicazione

Si possono utilizzare anche le impostazioni definite nel file di configurazione app.yml utilizzando il prefisso APP_.

Costanti speciali

Per impostazione predefinita, symfony definisce quattro costanti in relazione al front controller corrente:

Costanti Descrizione Metodo di configurazione
SF_APP Il nome dell'applicazione corrente getApplication()
SF_ENVIRONMENT Il nome dell'ambiente corrente getEnvironment()
SF_DEBUG Indica se il debug è attivo o meno isDebug()
SF_SYMFONY_LIB_DIR La cartella delle librerie symfony getSymfonyLibDir()

Le cartelle

Le costanti sono molto utili quando si ha bisogno di fare riferimento a cartelle o a percorsi di file senza inserirli nel codice. Symfony definisce alcune costanti per cartelle comuni a livello di progetto e di applicazione.

La radice della gerarchia è la cartella radice del progetto, SF_ROOT_DIR. Tutte le altre costanti derivano da questa cartella radice.

La struttura delle cartelle del progetto è definita come segue:

Costanti Valore predefinito
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 struttura delle cartelle delle applicazioni è definita nella cartella SF_APPS_DIR/APP_NAME:

Costanti Valore predefinito
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

Infine, la cartella della cache delle applicazioni è definita come segue:

Costanti Valore predefinito
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

Consapevolezza dell'ambiente

File di configurazione: settings.yml, factories.yml, databases.yml, app.yml

Alcuni file di configurazione di symfony dipendono dall'ambiente: la loro interpretazione dipende dall'attuale ambiente in uso. Questi file hanno sezioni diverse, che definiscono come la configurazione deve variare per ogni ambiente. Quando si crea una nuova applicazione, symfony crea configurazioni per i tre ambienti predefiniti: prod, test e dev:

prod:
  # Configurazione dell'ambiente `prod`
 
test:
  # Configurazione dell'ambiente `test`
 
dev:
  # Configurazione dell'ambiente `dev`
 
all:
  # Configurazione predefinita per tutti gli ambienti

Quando symfony necessita di un valore da un file di configurazione, procede facendo la fusione della configurazione per l'ambiente corrente con la sezione di configurazione definita in all. La sezione speciale all descrive la configurazione predefinita per tutti gli ambienti. Se la sezione di un ambiente specifico non è definita, symfony ricade sulla configurazione all.

Configurazione a cascata

File di configurazione: core_compile.yml, autoload.yml, settings.yml, factories.yml, databases.yml, security.yml, cache.yml, app.yml, filters.yml, view.yml

Alcuni file di configurazione possono essere definiti in molte sottocartelle config/, contenute nella struttura delle cartelle del progetto.

Quando la configurazione viene compilata, i valori da tutti i diversi file vengono fusi assieme, rispettando il seguente ordine di precedenza:

  • La configurazione del modulo (PROJECT_ROOT_DIR/apps/APP_NAME/modules/MODULE_NAME/config/XXX.yml)
  • La configurazione dell'applicazione (PROJECT_ROOT_DIR/apps/APP_NAME/config/XXX.yml)
  • La configurazione del progetto (PROJECT_ROOT_DIR/config/XXX.yml)
  • La configurazione definita nei plugin (PROJECT_ROOT_DIR/plugins/*/config/XXX.yml)
  • La configurazione definita nelle librerie di symfony (SF_LIB_DIR/config/XXX.yml)

Per esempio, quanto definito in settings.yml nella cartella di un'applicazione eredita dalla configurazione impostata nella cartella principale del progetto config/ ed eventualmente dalla configurazione predefinita contenuta nel framework stesso (lib/config/config/settings.yml).

tip

Quando un file di configurazione dipende dall'ambiente e può essere definito in diverse cartelle, si applica la seguente lista di priorità:

  1. Modulo
  2. Applicazione
  3. Progetto
  4. Ambiente specifico
  5. Tutti gli ambienti
  6. Impostazione predefinita