L’azienda di software francese Sen­sio­Labs ha ri­la­scia­to nell’ottobre 2015 il framework open source Symfony, il quale era stato ini­zial­men­te svi­lup­pa­to con il nome di Sensio Framework. Il nuovo nome, scritto de­ci­sa­men­te in maniera insolita, risulta dall’in­ten­zio­ne di riuscire a mantenere il vecchio prefisso “sf”. Lo sprone che ha portato allo sviluppo del framework è da ri­con­dur­re al pre­ce­den­te rilascio di Ruby on Rails, un anno prima, e il con­se­guen­te desiderio del team di sviluppo di rea­liz­za­re una piat­ta­for­ma di sviluppo com­pa­ra­bi­le per i progetti in lin­guag­gio PHP. Da allora Sen­sio­Labs ha con­ti­nua­to a svi­lup­pa­re con re­go­la­ri­tà il framework Symfony. A conferma di ciò nel 2011 è stato ri­la­scia­to Symfony 2, che ha in­tro­dot­to una struttura modulare al framework.

Cos’è Symfony?

Symfony è una col­le­zio­ne di circa una trentina di librerie PHP, sca­ri­ca­bi­li ed uti­liz­za­bi­li sia come pacchetto sia sin­go­lar­men­te. Oltre a queste com­po­nen­ti standard esistono dei moduli ag­giun­ti­vi, che servono a espandere il framework o che, come quelle standard, possono essere uti­liz­za­te se­pa­ra­ta­men­te. Stando ai dati di Sen­sio­Labs, negli ultimi 10 anni si sono già re­gi­stra­ti più di 500 milioni di download dei singoli pacchetti o anche dell’intero framework, il che si riflette sulla sua dif­fu­sio­ne generale. Numerosi progetti come ad esempio il CMS Drupal, lo strumento di web analisi Piwik o il software per i forum phpBB, fanno tutti af­fi­da­men­to sui com­po­nen­ti di Symfony. Tutti i pacchetti del framework sono di­spo­ni­bi­li e sca­ri­ca­bi­li gra­tui­ta­men­te sulla pagina officiale.

Symfony: in­tro­du­zio­ne ai com­po­nen­ti del web framework

Se Symfony serve da base di sviluppo per progetti web di tutti i tipi, lo si deve so­prat­tut­to alla sua struttura modulare. Ogni modulo, con la propria funzione, non dipende dagli altri com­po­nen­ti, ga­ran­ten­do così un elevato grado di fles­si­bi­li­tà e di am­plia­bi­li­tà al framework. In questo modo, nel caso in cui ne­ces­si­tia­te di un’ampia gamma di funzioni per il vostro progetto web, potete uti­liz­za­re Symfony come Full Stack Framework.

Inoltre avete la pos­si­bi­li­tà di mettere assieme la vostra libreria Symfony per­so­na­liz­za­ta o di creare una versione più leggera del framework. In questo modo i com­po­nen­ti si adattano in modo ottimale alle esigenze della vostra ap­pli­ca­zio­ne web, in­di­pen­den­te­men­te che si tratti di un complesso progetto aziendale o di un semplice sito web. Con­tem­po­ra­nea­men­te avete la pos­si­bi­li­tà di ag­giun­ge­re o eliminare de­ter­mi­na­ti moduli, purché questo non vada contro le con­di­zio­ni generali di utilizzo del framework.

Qui di seguito vi pre­sen­tia­mo alcuni dei com­po­nen­ti standard tra i quali potete scegliere:

  • Asset: modulo per la ge­ne­ra­zio­ne di URL e per il ver­sio­ning (gestione delle versioni) di file immagine, di fogli di stile CSS e di programmi Ja­va­Script;
  • Clas­sLoa­der: Clas­sLoa­der si assicura che le classi PHP se­le­zio­na­te vengano caricate au­to­ma­ti­ca­men­te;
  • Debug: mette a di­spo­si­zio­ne gli strumenti per un controllo di debugging, per­met­ten­do di iden­ti­fi­ca­re e clas­si­fi­ca­re eventuali errori nel codice PHP;
  • De­pen­den­cy­I­n­jec­tion: permette di definire gli standard per la creazione degli oggetti per il progetto in questione;
  • Event­Di­spat­cher: com­po­nen­ti ele­men­ta­ri, che regolano, sotto forma di eventi, la co­mu­ni­ca­zio­ne dei singoli moduli tra di loro;
  • Form: contiene strumenti con i quali produrre con sem­pli­ci­tà dei moduli HTML riu­ti­liz­za­bi­li;
  • Tem­pla­ting: un tool per la creazione di un sistema di template;
  • Trans­la­tion: modulo per l’in­ter­na­zio­na­liz­za­zio­ne del vostro progetto;
  • Validator: vi offre la pos­si­bi­li­tà di con­va­li­da­re le classi prodotte;
  • Yaml: carica e archivia i vostri file con esten­sio­ne .yml.
Consiglio

Sapevate che Symfony e Laravel sono tra i framework PHP più popolari? Vi mostriamo cosa li rende così validi.

Il concetto del Model-View-Con­trol­ler per la strut­tu­ra­zio­ne dell’ap­pli­ca­zio­ne web

Symfony permette l’im­ple­men­ta­zio­ne del Model-View-Con­trol­ler (MVC). Questo modello ar­chi­tet­tu­ra­le suddivide le ap­pli­ca­zio­ni in tre settori:

  • Dati e fun­zio­na­li­tà centrali, che cor­ri­spon­do­no al Model;
  • Rap­pre­sen­ta­zio­ne visiva dei dati prodotti, che cor­ri­spon­de al View;
  • Ela­bo­ra­zio­ne degli input utente, cor­ri­spon­den­te al Con­trol­ler.

L’utilizzo del concetto MVC fornisce un codice di pro­gram­ma­zio­ne chiaro e ben strut­tu­ra­to, oltre che un’elevata fles­si­bi­li­tà dei diversi com­po­nen­ti, i quali, grazie ad esso, possono essere scambiati e riu­ti­liz­za­ti, non essendo collegati a dei dati immessi concreti. A questo punto va però chiarito che no­no­stan­te tutto Symfony non ap­par­tie­ne alla squadra dei framework MVC, come sarebbe con­ce­pi­bi­le pensare, e che non contiene alcun com­po­nen­te integrato del modello. Doveste iniziare un nuovo progetto con Symfony, mancherà con­se­guen­te­men­te anche la tipica cartella relativa al modello. Con l’aiuto di librerie ORM ag­giun­ti­ve (ORM sta per Object Relation Mapping), come Doctrine o Propel, entrambe con­si­glia­te da Sen­sio­LAbs, riuscite ad ar­chi­via­re nel sistema di database l’oggetto in questione senza problemi e senza dover dipendere da aiuti esterni. Per rea­liz­za­re la pre­sen­ta­zio­ne (view) della vostra ap­pli­ca­zio­ne web, uti­liz­za­te il modulo Tem­pla­ting e create i template cor­ri­spon­den­ti, i quali, tramite delle funzioni spe­ci­fi­che, potranno poi essere ampliati con l’aiuto dei co­sid­det­ti Helper (oggetti PHP). Il piano di controllo (Con­trol­ler) porta so­li­ta­men­te il nome di index.php e può essere trovato nella cartella “web”. Invece, per quel che riguarda gli input degli utenti, su Symfony, così come su molti altri framework, si chiamano “Actions”.

Symfony: PHP come calamita per gli utenti

Symfony è una col­le­zio­ne di diverse librerie PHP, perciò è ne­ces­sa­rio che abbiate in­stal­la­to questo lin­guag­gio di scripting per poter usufruire del framework. At­tual­men­te per la versione Symfony 2.8 è ne­ces­sa­rio quan­to­me­no la versione PHP 5.3.9. Symfony 3.1 e 3.2 ne­ces­si­ta­no della versione PHP 5.5.9 o di una più recente. Sin dall’inizio il team di sviluppo di Sen­sio­Labs ha avuto come obiettivo quello di creare una col­le­zio­ne di com­po­nen­ti per i progetti PHP, che potesse con­cor­re­re con i com­pa­ra­bi­li framework in altri linguaggi di pro­gram­ma­zio­ne. In par­ti­co­la­re Ruby on Rails ha imposto agli svi­lup­pa­to­ri francesi di orien­tar­si verso la struttura del celebre framework Ruby, so­prat­tut­to per quel che riguarda la scelta e la gestione dei singoli com­po­nen­ti. Lo sviluppo suc­ces­si­vo e il successo del framework Symfony sono dunque stret­ta­men­te connessi alla storia del lin­guag­gio di scripting. Essendo che il PHP è di­spo­ni­bi­le come lin­guag­gio open source e che gode da sempre grande ap­prez­za­men­to tra gli addetti ai lavori, negli ultimi anni diversi svi­lup­pa­to­ri hanno con­tri­bui­to all’ot­ti­miz­za­zio­ne. Il notevole aumento delle per­for­man­ce, legato al PHP 7, lascia presumere inoltre che ci saranno degli effetti positivi anche sulle pre­sta­zio­ni delle future ap­pli­ca­zio­ni Symfony.

La com­pa­ti­bi­li­tà con le versioni pre­ce­den­ti e quelle LTS pro­met­to­no con­ti­nui­tà

A partire dal 2013 ogni sei mesi viene ri­la­scia­ta una nuova versione di Symfony, e tutti gli utenti che si sono re­gi­stra­ti a Sen­sio­Lab­sCon­nect, ovvero la community, vengono pron­ta­men­te informati per e-mail a ridosso della data di rilascio. L’uscita se­me­stra­le di un upgrade del framework può dare di primo acchito l’im­pres­sio­ne che sia richiesto un impegno continuo, in par­ti­co­la­re per le ap­pli­ca­zio­ni web più complesse. Tuttavia Sen­sio­Labs offre adeguate soluzioni che ga­ran­ti­sco­no la ne­ces­sa­ria con­ti­nui­tà al framework e alle ap­pli­ca­zio­ni svi­lup­pa­te:

  • Com­pa­ti­bi­li­tà con le versioni pre­ce­den­ti: tutte le versioni di Symfony a partire dalla 2.3 si di­stin­guo­no per la loro com­pa­ti­bi­li­tà con le versioni pre­ce­den­ti. Ciò significa che la fun­zio­na­li­tà delle ap­pli­ca­zio­ni svi­lup­pa­te viene garantita anche passando ad una versione più recente. Tuttavia vi sono delle eccezioni per le quali la promessa di com­pa­ti­bi­li­tà il­li­mi­ta­ta non è valida. Inoltre le pub­bli­ca­zio­ni più grandi come Symfony 3.0, 4.0, ecc., sono escluse da questa garanzia.
  • Supporto a lungo termine: so­li­ta­men­te le versioni Symfony vengono sup­por­ta­te per 8 mesi. Ma con la versione 2.3 Sen­sio­Labs è stata ri­la­scia­ta la prima edizione di Symfony con supporto a lungo termine. Queste versioni con supporto a lungo termine sono pia­ni­fi­ca­te per due anni e ga­ran­ti­sco­no update per 36 mesi per i bug, e 48 mesi per le patch di sicurezza. In aggiunta alla seconda versione di Symfony con supporto a lungo termine, ovvero la 2.7, anche la suc­ces­si­va versione, la 2.8, è stata dotata di un periodo di supporto pro­lun­ga­to.
  • “Con­ti­nuous Upgrade Path” per la versione 3.0: il team di sviluppo ha unito il concetto del Con­ti­nuous Upgrade Path (che in italiano potrebbe essere chiamato processo di mi­gra­zio­ne continuo) al passaggio all’ultima versione prin­ci­pa­le di Symfony, la 3.0. In questo modo potete inserire ri­fe­ri­men­ti det­ta­glia­ti per le righe di codice troppo elaborate nelle versioni 2.x (ovvero: 2.1, 2.2, e così via) e adattarle con­ti­nua­men­te ai nuovi valori. A questo punto potete dunque iniziare l’upgrade alla nuova versione del framework per la vostra ap­pli­ca­zio­ne web.

I vantaggi e gli svantaggi del framework Symfony

In passato la scelta del framework PHP adatto era equi­pa­ra­bi­le alla ricerca dell’ago in un pagliaio: il desiderio di un set di librerie dalle pre­sta­zio­ni elevate per il lin­guag­gio di pro­gram­ma­zio­ne web preferito ha portato allora sviluppo di numerosi framework, i quali erano adatti in maniera diversa ai progetti più disparati. Ma solo una manciata di framework, tra i quali anche Symfony, sono riusciti grazie ai continui progressi a con­vin­ce­re numerosi svi­lup­pa­to­ri PHP.

Il framework punta so­prat­tut­to alla strut­tu­ra­zio­ne e al col­le­ga­men­to dei singoli moduli, con l’aiuto dei quali è possibile rea­liz­za­re una grande varietà di diverse ap­pli­ca­zio­ni web, e perciò gode tutt’ora del benestare della community. Con le versioni che vantano del supporto a lungo termine e la promessa di offrire la miglior com­pa­ti­bi­li­tà possibile con le altre versioni, il team di sviluppo di Sen­sio­Labs offre tutto ciò che è ne­ces­sa­rio per garantire la con­ti­nui­tà dei progetti Symfony.

No­no­stan­te i supporti e gli aiuti offerti, il passaggio ad una nuova versione del framework e gli adat­ta­men­ti di codice dell’ap­pli­ca­zio­ne svi­lup­pa­ta con Symfony derivanti dal passaggio da una versione all’altra, possono rap­pre­sen­ta­re talvolta un vero e proprio ostacolo. Alla fine dei conti anche la com­ples­si­tà rap­pre­sen­ta un grande problema del framework PHP. Vero è che trovate tutta la do­cu­men­ta­zio­ne e le spie­ga­zio­ni ne­ces­sa­rie, ma cio­no­no­stan­te per gli utenti meno esperti è difficile prendere con­fi­den­za con il framework Symfony. Inoltre il framework Symfony presenta dei punti deboli per quanto riguarda le per­for­man­ce, anche in com­pa­ra­zio­ne ad altri framework PHP.  A questo riguardo il comune utilizzo della libreria ORM Doctrine, che ap­pe­san­ti­sce molto la fun­zio­na­li­tà, gioca un ruolo fon­da­men­ta­le.

Per chi è più adatta la col­le­zio­ne di com­po­nen­ti PHP?

Tutti i moduli di Symfony si di­stin­guo­no per il fatto che fun­zio­na­no sia sin­go­lar­men­te sia in con­nes­sio­ne tra di loro. Ma con Symfony non si tratta di un pacchetto di com­po­nen­ti standard che vi costringe a prendere tutto o niente, al contrario potete comporre il vostro micro framework, con­te­nen­te solo i com­po­nen­ti da voi scelti. In questo modo evitate di dover lavorare con una struttura di librerie so­vrac­ca­ri­ca, che supera di gran lunga le esigenze del progetto da svi­lup­pa­re.

D’altro canto Symfony è anche scalabile e può essere ve­lo­ce­men­te con­fi­gu­ra­ta, tramite l’aggiunta di altri moduli, in modo da poter essere uti­liz­za­bi­le per progetti web molto complessi. A di­mo­stra­zio­ne di ciò è il fatto che ad uti­liz­za­re Symfony non sono solo numerose ap­pli­ca­zio­ni web, ma anche il sito web del fa­mo­sis­si­mo servizio streaming di musica Spotify o, per citare un altro esempio celebre, anche il sito web della famosa rivista di moda Vogue usu­frui­sce del framework PHP.

Il framework Symfony rap­pre­sen­ta la scelta giusta per voi nel caso in cui lavoriate già con il PHP e de­si­de­ria­te poter contare su una grande fles­si­bi­li­tà. Per poter uti­liz­za­re in maniera corretta le singole librerie è ne­ces­sa­ria ben più di una co­no­scen­za basilare del lin­guag­gio di scripting PHP. Inoltre è in­di­spen­sa­bi­le tenere sempre presente il tempo richiesto per imparare a conoscere le pe­cu­lia­ri­tà del framework; una volta fatto allora sì che potrete godervi tutti i benefici dell’aver scelto Symfony come framework per la vostra presenza web.

Vai al menu prin­ci­pa­le