Symfony

Symfony è un framework PHP sviluppato da SensioLabs e rilasciato sotto Licenza MIT (licenza libera). È anche un insieme di componenti PHP stand-alone, una filosofia e una comunità. Le mie impressioni dopo un mese di utilizzo davvero intenso.

Screenshot della homepage di Symfony

Definizione

La definizione dal sito ufficiale è: « Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony. »

Il mese appena trascorso è stato uno dei mesi più intensi di tutta la mia vita: ho portato avanti con successo tre progetti molto grossi di sviluppo web, dove ho curato sia l'aspetto di progettazione che di sviluppo. In tutto questo non ho idea di quanti litri di caffé e redbull abbia ingurgitato.

Iniziamo per gradi: la vera sfida è stata creare tre applicazioni distinte web based utilizzando Symfony 3.4. Le tre applicazioni dovevano gestire:

  • la registrazione e immatricolazione degli studenti ad un'università, la configurazione del piano degli studi, l'invio in formato digitale dei documenti necessari per l'immatricolazione. L'applicazione deve anche fornire un backoffice per la segreteria generale e le varie segreterie delle singole facoltà
  • la pianificazione e la creazione di ordini di produzione, l'inventario, tracciabilità e contabilità di un'azienda di produzione di gelati
  • la configurazione e la personalizzazione di vari prodotti, per l'acquisto online. Il sistema si interfaccia a Prestashop e deve fornire i report delle vendite associate ai vari affiliati al servizio.

Installazione

L'installazione avviene tramite l'installer ufficiale symfony oppure tramite composer. Ho optato per la prima soluzione, lanciando da riga di comando:

symfony new --full --version=3.4 my_project

Ad oggi esistono due versioni sviluppate attivamente: 3.4 LTS (più stabile e supporto fino a nov 2020) e la 4.3 funzionalità innovative ma ciclo di vita molto più breve (gen 2020). Le specifiche del progetto richiedevano di un sistema stabile e solido, abbiamo pertando deciso di utilizzare il ramo 3.4.

Per ogni versione è inoltre possibile scegliere se installare una versione lite con pochi componenti (symfony/skeleton) adatta per API o microservizi, lite ottimizzata per siti web (symfony/website-skeleton) o full dove vengono installati tutti i componenti del framework.

Dalla versione 3.3 è stato inoltre introdotto un nuovo sistema chiamato Symfony Flex che automatizza alcuni task ricorrenti nella creazione di applicazioni. Dalla versione 4, è fortemente consigliato l'utilizzo ma resta comunque non obbligatorio.

Quali componenti ho utilizzato

Il framework è composto da oltre 50 componenti indipendenti che coprono la gestione delle richieste e delle risposte HTTP, traduzione, form, interazione con basi dati, test, validazione e un sacco di altra roba.

Ecco una parte dei componenti che ho utilizzato per lo sviluppo:

  • HttpKernel
  • HttpFoundation
  • HttpClient
  • Console
  • Config
  • VarDumper
  • Mailer
  • Templating
  • Routing
  • Process
  • Logging
  • Testing
  • Database (Doctrine ORM)
  • Translation

Templating

La gestione dei template avviene tramite Twig, un template engine sviluppato da Fabien Potencier e rilasciato sotto licenza BSD. Io personalmente lo preferisco a Smarty.

Debug

Il debug è agevolato dalla libreria VarDumper, che permette la stampa delle informazioni associate ad una variabile in modo chiaro e pulito. Inoltre attivando la modalità developer dell'applicazione, è possibile accedere a una comoda toolbar su ogni singola pagina, per accedere anche al profiler integrato.

Problematiche

Uno dei grossi problemi che ho riscontrato riguarda la documentazione: nonostante abbia installato la 3.4 il 90% delle informazioni le ho ricavare dal ramo della 4.2, come per esempio la creazione delle entità o dei controller tramite CLI o la gestione delle configurazioni dei vari servizi tramite yaml. La documentazione è totalmente in inglese (per me non è assolutamente un problema, anzi. Però per alcuni sviluppatori potrebbe essere un problema bloccante).

In questo breve articolo ho illustrato solo alcune delle caratteristiche più importanti. Nelle prossime settimane scriverò alcuni articoli soffermandomi su alcuni dettagli molto più tecnici e che magari possono aiutare altri sviluppatori che come me hanno scelto di utilizzare questo potente framework.