Symfony è un framework scritto interamente in PHP 5 sul modello MVC (Model-View-Controller) del framework Mojavi da Fabien Potencier e rilasciato sotto licenza open source. La sua prima versione definitiva fu realizzata verso la fine del 2005, da allora questo progetto ha riscosso un grande successo tanto da essere utilizzato per lo sviluppo di numerosi siti Web tra cui anche alcuni portali destinati a gestire grandi quantità di traffico e non pochi servizi di e-commerce.
Symfony, nasce da un'esigenza molto sentita presso gli sviluppatori: non dover essere costretti a "reinventare la ruota" ogni volta che si deve creare una nuova applicazione; questo framework permette infatti di utilizzare uno strumento in grado di semplificare i processi di programmazione ed di ridurre al minimo i tempi di lavoro necessari per il completamento di operazioni ripetitive.
Riassumiamo i motivi per cui può essere vantaggioso utilizzare una soluzione come Symfony:
- Consente di creare applicazioni da zero automatizzando le procedure necessarie per la creazione di determinate funzionalità; se si crea un form non sarà necessario ricreare ogni volta il codice necessario alla validazione dei campi, se ci si interfaccia ad un DBMS non sarà necessario riscrivere continuamente il codice necessario per le interrogazioni e così via..
- Permette di seguire una struttura logica nello sviluppo di un'applicazione; il framework richiede che i passaggi necessari alla creazione di uno script vengano rispettati seguendo un determinato ordine, in questo modo il listato risulterà molto più comprensibile, pulito e leggero.
- Mette a disposizione dello sviluppatore la possibilità di eseguire operazioni anche complesse attraverso semplici istruzioni: metodi, proprietà e funzioni sono già previsti dal framework pronti a funzionare tramite una semplice chiamata.
Le caratteristiche di Symfony
Symfony ha bisogno di minimi requisiti di sistema per poter essere utilizzato; un'architettura LAMP (Linux, Apache, MySQL e PHP) è già di per sé più che sufficiente. Naturalmente per via delle caratteristiche intrinseche al progetto non sarà possibile lavorare con versioni di PHP inferiori alla 5, in generale è comunque opportuno utilizzare l'ultima versione stabile di questo linguaggio.
MySQL è sicuramente il DBMS più utilizzato per applicazioni Web based, in ogni caso Symfony mette a disposizione la possibilità di lavorare anche con altri database server molto diffusi (e non necessariamente open source) come per esempio PostgreSQL, Oracle, SQLite e Microsoft SQL Server. Per quanto riguarda la piattaforma server di sviluppo, una macchina con installato un sistema operativo Linux, Unix o Unix like è da considerare come la soluzione preferibile; in mancanza di questo il framework è comunque in grado di lavorare egregiamente anche sotto Windows.
Symfony è molto semplice da installare, richiede una procedura di configurazione minimale ed è altrettanto semplice da utilizzare garantendo la massima flessibilità anche nell'esecuzione delle operazioni più complesse. Integra classi che consentono di svolgere velocemente le operazioni più comunemente richieste nello sviluppo di un'applicazione e consente di scrivere codice pulito e facilmente aggiornabile. Per maggiore praticità in sede di sviluppo o nelle successive fasi di implementazione, i commenti al codice vengono prodotti tramite phpDocumentor.
Il framework è stato poi concepito per integrare eventuali estensioni che permettano di aumentarne funzionalità e potenzialità. Relativamente alle caratteristiche delle applicazioni sviluppate con Symfony è possibile sottolineare alcune caratteristiche fondamentali:
- Il codice relativo all'applicazione e quello del template grafico sono gestiti come entità indipendenti; da una parte quindi lo sviluppatore potrà concentrarsi unicamente sulla parte funzionale e dinamica del progetto, dall'altra il Web designer potrà lavorare liberamente senza dover mai intervenire su alcun elemento logico dell'applicazione
- Symfony è in grado di gestire nativamente l'escaping degli output, questa caratteristica aumenta il livello generale di sicurezza relativo all'applicazione; inoltre, sono previsti strumenti per la validazione dei parametri inviati tramite form e per la loro ottimizzazione nel momento in cui vengono convertiti in dati da archiviare all'interno delle basi di dati.
- Il framework consente di sviluppare applicazioni caratterizzate da diversi gradi di complessità: si va dal semplice blog personale fino alla più completa applicazione per il commercio elettronico da utilizzare in ambite enterprise.
Riguardo all'ultimo punto è bene precisare che un framework così ricco di funzioni come Symfony sarebbe evidentemente sprecato per la realizzazione di un semplice sito di 4 o 5 pagine destinato a qualche sporadico aggiornamento; in questo caso l'utilizzo di Symfony è anzi da sconsigliare in quanto per le sue caratteristiche intrinseche (struttura orientata agli oggetti e utilizzo di pattern MVC) non farebbe altro che rendere il lavoro più lungo e faticoso.
Per progetti del genere il classico scripting PHP è più che sufficiente, Symfony dovrà essere utilizzato invece per la creazione di progetti complessi o anche per la scrittura di applicazioni semplici ma destinate in prospettiva ad implementazioni sostanziali.
Gli strumenti per lo sviluppatore
Symfony è uno strumento pensato per gli sviluppatori, oltre alle funzionalità relative alla scrittura del codice questo framework fornisce dalla prima installazione tool per l'automatizzazione di procedure più o meno complesse ma tutte indispensabili per ridurre i tempi destinati allo sviluppo e migliorare quanto più possibile la qualità del prodotto finito.
Il framework mette a disposizione tra gli altri:
- Uno strumento integrato per effettuare test durante la fase di sviluppo.
- Un pannello per le operazioni di debugging con cui sarà possibile accedere a tutte le informazioni relative al funzionamento (e agli eventuali malfunzionamenti) delle pagine.
- Un supporto per l'esecuzione di istruzioni da linea di comando.
- Funzionalità per la generazione del codice.
- Un sistema di log per effettuare analisi puntuali sul funzionamento dell'applicazione.
Le applicazioni create con Symfony potranno poi contare su funzionalità mirate al mantenimento delle performance in fase di produzione così come a garantire un alto livello di sicurezza nonché possibilità di espansione delle funzionalità:
- Un avanzato sistema di gestione della cache per ridurre al minimo la quantità di banda utilizza.
- La possibilità di creare facilmente aree riservate con accesso tramite autenticazione.
- Strumenti per gestire facilmente posta elettronica e API.
- Incapsulamento di effetti JavaScript già previsti nel framework che permettono di utilizzare una tecnologia avanzata come Ajax anche senza una conoscenza approfondita da parte dello sviluppatore.
- Gestione intelligente delle URL grazie alla quale gli indirizzi diventano parte integrante dell'applicazione e possono essere definiti in fase di sviluppo.
Installazione di Symfony
Esistono due modalità principali per installare Symfony, la prima (via Sandbox) consente semplicemente di effettuare dei test di sviluppo ed è assolutamente inadatta per essere utilizzata all'interno di ambienti di produzione; la seconda, caldamente raccomandata dagli stessi sviluppatori del framework, è la procedura tramite canale PEAR.
Installazione da Sandbox
Se si è semplicemente incuriositi da Symfony e prima di utilizzarlo per il proprio lavoro si desidera dare uno sguardo generale all'applicazione è possibile limitarsi ad una rapida installazione con Sandbox.
La Sandbox si presenta come una semplice raccolta di file che includono tutte le librerie necessarie, una basilare applicazione di default e una configurazione minima; per il suo funzionamento non sono richiesti pacchetti aggiuntivi.
L'archivio compresso contenente la Sandbox è reperibile indirizzo http://www.symfony-project.org/get/sf_sandbox_1_1.tgz; una volta scompattato l'archivio i file in esso contenuti dovranno essere copiati sotto la root del Web server in una directory il cui nome non è vincolante ai fine del funzionamento dell'applicazione.
A questo punto sarà possibile eseguire un breve test per valutare l'esito della procedura di installazione che potrà essere operato tramite un semplice comando:
> ./symfony -V
oppure:
> symfony -V
su Windows.
Se tutto è andato per il meglio il sistema risponderà indicandoci la versione di Symfony appena installata. La sandbox sarà ora raggiungibile semplicemente digitando l'indirizzo:
http://localhost/cartella_sandbox/web/frontend_dev.php
Installazione da PEAR
Per quanto più sicura e più adatta alle fasi di produzione, l'installazione tramite canale PEAR non è particolarmente complessa. La prima operazione da compiere sarà quella di aggiungere un canale PEAR attraverso il seguente comando:
pear channel-discover pear.symfony-project.com
Con una semplice istruzione sarà poi possibile visualizzare i packages disponibili sul canale:
pear remote-list -c symfony
Passando alla fase di installazione vera e propria, questa potrà essere inizializzata tramite il seguente comando:
pear install symfony/symfony
All'utilizzatore non sarà richiesto altro che un semplice symfony -V
per controllare l'esito della procedura.
Il primo progetto
Sarà quindi possibile avviare un primo progetto:
// creare una cartella per il progetto > mkdir /test // spostarsi all'interno della cartella progetto > cd /test // inizializzare il progetto > symfony init-project test
A questo punto verrà creata una struttura di directory simile alla seguente:
apps/ batch/ cache/ config/ data/ doc/ lib/ log/ plugins/ test/ web/
In questa forma, il progetto non è ancora pronto per la pubblicazione, infatti non contiene al suo interno alcuna applicazione; per la creazione di quest'ultima è necessario lanciare il seguente comando:
> symfony init-app nome_applicazione
In questo modo, all'interno della directory /apps verrà creata una serie di sotto-directory destinate ad ospitare i file del sito Web:
apps/ nome_applicazione/ config/ i18n/ lib/ modules/ templates/
La directory /web conterrà invece i file relativi al front end del progetto:
web/ index.php nome_applicazione_dev.php
Le pagine presenti all'interno della directory /web rappresentano in pratica i punti d'ingresso verso l'applicazione; perché questi siano accessibili bisogna effettuare una breve procedura di configurazione del Web server creando un virtual host.
Dato che non sempre si ha la possibilità di accedere direttamente al file di configurazione di Apache è possibile effettuare la stessa operazione tramite .htaccess, a questo scopo Symfony mette a disposizione un .htaccess nella root del progetto che contiene l'applicazione, sarà sufficiente modificarlo sulla base dei parametri relativi al proprio spazio Web:
Options +FollowSymLinks +ExecCGI <IfModule mod_rewrite.c> RewriteEngine On # we skip all files with .something RewriteCond %{REQUEST_URI} ..+$ RewriteCond %{REQUEST_URI} !.html$ RewriteRule .* - [L] # we check if the .html version is here (caching) RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f # no, so we redirect to our front web controller RewriteRule ^(.*)$ index.php [QSA,L] </IfModule> # big crash from our front web controller ErrorDocument 500 "<h2>Application error</h2>symfony applicationfailed to start properly"
Tenendo conto del fatto che non necessariamente la cartella accessibile dal Web in uno spazio hosting è denominata /web, il suo nome potrà essere modificato, ad esempio in /www, ma per far questo è importante aggiungere al file presente nel percorso apps/myapp/config/config.php il codice necessario per comunicare al framework la modica nella struttura delle directory:
$sf_root_dir = sfConfig::get('sf_root_dir'); sfConfig::add(array( 'sf_web_dir_name' => $sf_web_dir_name = 'www', 'sf_web_dir' => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name, 'sf_upload_dir' => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'), ));
Una volta riavviato il server, la schermata di benvenuto di Symfony sarà raggiungibile all'indirizzo:
http://www.sitoweb.it/nome_applicazione_dev.php
Conclusioni
In questo capitolo abbiamo presentato le caratteristiche e le funzionalità di base del framework PHP Symfony per poi passare alle differenti modalità necessarie al suo test e alla sua installazione. Il discorso su Symfony non si conclude con questa trattazione, nei prossimi articoli analizzeremo approfonditamente il suo funzionamento per poi passare alla creazione di una prima applicazione basata su questo framework.