Quando si sviluppa un applicativo utilizzando Symfony abbiamo la possibilità di generare diversi ambienti. In maniera del tutto intuitiva possiamo pensare, ad esempio, ad un ambiente di sviluppo ed uno di produzione oppure, per un applicativo che prevede una parte di front-end e una parte di back-end, ci potrà essere un ambiente di sviluppo per il front-end ed uno per il back-end, un ambiente di produzione per il front-end e uno per il back-end. Ciascun ambiente ha un front controller distinto (vedi tabella seguente).
Ambiente | Front controller |
---|---|
Sviluppo Front-End | frontend_dev.php |
Produzione Front-End | index.php |
Sviluppo Back-End | backend_dev.php |
Produzione Back-End | backend.php |
I file dei vari front controller sono tutti contenuti nella sotto-directory web della directory principale del progetto. Avendo però più di un front controller dovrà esistere una qualche maniera per indicare all'applicativo sviluppato con Symfony quale di essi dovrà essere utilizzato. Dobbiamo allora andare a osservare i file settings.yml contenuti all'interno delle directory appsNomeApplicazioneconfig dove con NomeApplicazione si intende il nome dell'applicazione in questione (backend e frontend, ad esempio).
Listato 6: Un esempio di file settings.yml
prod:
.settings:
no_script_name: on
logging_enabled: off
dev:
.settings:
error_reporting: <?php echo (E_ALL | E_STRICT)."n" ?>
web_debug: on
cache: off
no_script_name: off
etag: off
Quando il valore della variabile no_script_name
è on
allora viene utilizzato il front controller indicato dal web server; quando il valore della variabile no_script_name
è off
allora il front controller da utilizzare deve essere indicato nell'URL, ad esempio: http://www.biblioteca.it/frontend_dev.php/libri/informatica/2009/lista-libri.html
Bisogna a questo punto capire come configurare il web server per richiamare il giusto front controller quando questo non è specificato nell'URL.
Se si utilizza Apache, questo è possibile solo se è attivata l'estensione mod_rewrite, cui abbiamo dedicato tempo fa un ampio approfondimento. Ogni progetto Symfony contiene all'interno della directory web il file .htaccess che serve proprio ad attivare l'estensione mod_rewrite al web server per la directory web. Il web server analizza l'URL e se non trova nessuna stringa con un suffisso (.php, .html, ad esempio) e non c'è una versione della pagina disponibile nella cache allora gira la richiesta alla pagina index.php.
Sarebbe corretto impostare a on la variabile no_script_name di un solo ambiente in quanto il meccanismo di URL rewriting è capace di gestire una sola applicazione per un solo ambiente. Se vengono impostate a on variabili no_script_name di più ambienti tutti gli URL vengono interpretati come richiesta del front controller del front-end di produzione.