Symfony e Laravel sono i framework PHP più ap­prez­za­ti: ormai maturi e am­pia­men­te col­lau­da­ti, entrambi pre­sen­ta­no vantaggi e svantaggi tipici. Vi spie­ghia­mo come fun­zio­na­no i framework PHP e per quali progetti è più indicato l’uso di Laravel o Symfony.

Che cos’è il PHP e quali sono i framework PHP esistenti?

Al momento della sua uscita, a metà degli anni Novanta, il PHP era il primo lin­guag­gio di pro­gram­ma­zio­ne dedicato per il web. I “Personal Home Page Tools”, come questo lin­guag­gio si chiamava all’inizio, per­met­te­va­no di creare un documento HTML sul server in modo dinamico. Cerchiamo di capire meglio cosa significa.

I documenti HTML co­sti­tui­sco­no la base delle in­for­ma­zio­ni presenti in rete, mentre la struttura dei contenuti veri e propri è data dai tag HTML. L’HTML diventa in­te­res­san­te nel momento in cui all’interno della struttura statica si in­se­ri­sco­no documenti pro­gram­ma­ti in modo dinamico. Ed è proprio qui che stava la ri­vo­lu­zio­ne portata dal PHP: un lin­guag­gio che poteva essere in­cor­po­ra­to nell’HTML e in altri documenti di testo. La struttura statica rimane inal­te­ra­ta, ma le in­for­ma­zio­ni dinamiche vengono inserite tramite righe di codice poste fra appositi “tag PHP”. Ad esempio, è possibile vi­sua­liz­za­re il nome di un utente nel messaggio di benvenuto nel modo seguente:

<h1>
    Welcome back, <?php echo $user ?>
</h1>
PHP
Consiglio

De­si­de­ra­te saperne di più sul lin­guag­gio di scripting? Il tutorial su PHP descrive tutte le nozioni fon­da­men­ta­li e i primi passi.

Il sempre più frequente bisogno di fun­zio­na­li­tà per ap­pli­ca­zio­ni web, come il col­le­ga­men­to ai database, l’au­ten­ti­ca­zio­ne degli utenti e la convalida dei moduli, ha portato alla comparsa di framework web per il PHP. Ponendosi a livello con­cet­tua­le a metà strada fra libreria di pro­gram­ma­zio­ne e content ma­na­ge­ment system, i livelli e i com­po­nen­ti di questi framework sono adatti alla creazione di sistemi di maggiori di­men­sio­ni. Nel frattempo, oltre a Laravel e Symfony sono stati svi­lup­pa­ti diversi altri framework PHP:

  • CakePHP, 2005
  • Symfony, 2005
  • Co­deI­gni­ter, 2006
  • Laminas Project, noto in pre­ce­den­za come Zend Framework, 2006
  • Yii, 2008
  • Laravel, 2011

Symfony o Laravel

I framework web per PHP Laravel e Symfony con­di­vi­do­no molti aspetti. Entrambi sono stati svi­lup­pa­ti come progetti open source e sono adatti alla creazione di ap­pli­ca­zio­ni web basate su server. A tal fine, Laravel e Symfony sfruttano il pattern “MVC (Model-View-Con­trol­ler)” per garantire la se­pa­ra­zio­ne degli aspetti più critici. Le richieste alle ap­pli­ca­zio­ni web vengono elaborate da un con­trol­ler, il quale gestisce i dati tramite il model e li presenta quindi alla view:

  • Model: modello e gestione dei dati
  • View: in­ter­fac­cia utente
  • Con­trol­ler: in­ter­fac­cia fra model e view

Sia Laravel che Symfony hanno con­tri­bui­to in modo de­ter­mi­nan­te allo sviluppo dell’eco­si­ste­ma PHP, dando vita entrambi a im­por­tan­ti progressi nelle tec­no­lo­gie basate sul PHP, uti­liz­za­te anche in altri progetti. In par­ti­co­la­re, Symfony è noto per la struttura modulare dei com­po­nen­ti, che sono di­sac­cop­pia­ti gli uni dagli altri e a cui fanno ricorso anche altri framework PHP, come Yii e Laravel.

Il “Composer” offre una solida base per la gestione dei pacchetti in progetti PHP con Laravel e Symfony. Oltre al framework vero e proprio, è possibile in­stal­la­re e gestire ulteriori com­po­nen­ti. Composer è di­spo­ni­bi­le su tutti i sistemi operativi per server; pertanto, è possibile uti­liz­za­re il PHP con Composer su Ubuntu oppure uti­liz­zar­lo in pacchetti di web hosting IONOS.

Consiglio

Per il vostro sito web per­so­na­liz­za­to uti­liz­za­te un web hosting veloce e sicuro, completo di dominio, con i pacchetti di web hosting di IONOS.

In questo articolo ci con­cen­tria­mo sui framework Laravel versione 4+ e Symfony versione 2/3. Le versioni pre­ce­den­ti avevano strutture com­ple­ta­men­te diverse. Diamo uno sguardo più da vicino alle seguenti ca­rat­te­ri­sti­che di Laravel e Symfony:

Ca­rat­te­ri­sti­che Symfony Laravel
Tem­pla­ting Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Con­fi­gu­ra­zio­ne YAML PHP

Tem­pla­ting in Laravel e Symfony

L’idea del PHP di usare il “template” come modello per combinare com­po­nen­ti statici e dinamici era ri­vo­lu­zio­na­ria. In pre­ce­den­za, era ne­ces­sa­rio combinare l’intero codice HTML a livello di pro­gram­ma­zio­ne mediante la con­ca­te­na­zio­ne di stringhe composte da parti statiche e valori generati di­na­mi­ca­men­te. Questo approccio era laborioso e tendente a errori, in quanto era difficile mantenere una visione d’insieme.

Oltre all’in­cor­po­ra­zio­ne di codice in testi statici, anche i co­sid­det­ti “include” hanno con­tri­bui­to no­te­vol­men­te al successo del PHP. Il comando include consente di riunire più elementi in un singolo sito. In questo modo è possibile rea­liz­za­re layout coerenti, ossia più pagine con contenuti diversi ma con lo stesso menu di na­vi­ga­zio­ne.

Per tem­pla­ting si intende quindi la creazione di documenti HTML partendo da modelli statici e com­po­nen­ti dinamici. Se uti­liz­za­to di­ret­ta­men­te come lin­guag­gio per i template, il PHP mostra ra­pi­da­men­te alcuni seri svantaggi. Poiché in un file PHP si mescolano contenuti HTML, PHP, SQL, CSS e Ja­va­Script, viene a mancare una valida se­pa­ra­zio­ne fra i vari aspetti. Inoltre si ve­ri­fi­ca­no vul­ne­ra­bi­li­tà dovute alla SQL injection e al cross-site scripting (XSS).

Per prevenire questi effetti negativi, sia Laravel che Symfony uti­liz­za­no i propri linguaggi di template, che ac­qui­si­sco­no i dati e li uti­liz­za­no per ren­de­riz­za­re l’HTML. Questo sistema permette di garantire una valida se­pa­ra­zio­ne fra i vari aspetti, ripulisce au­to­ma­ti­ca­men­te l’output tramite una co­sid­det­ta procedura di “escaping” e previene l’iniezione di codice. I documenti PHP o HTML così creati possono essere me­mo­riz­za­ti tem­po­ra­nea­men­te in una cache.

Il lin­guag­gio per i template di Symfony (“Twig”) permette di creare complesse famiglie di documenti, complete di layout, partial e com­po­nen­ti. Twig contiene una gran quantità di filtri e funzioni utili e si basa su una sintassi facile da imparare. Creiamo un elenco dinamico di utenti con la seguente procedura:

<h1>Users</h1>
<ul>
    {% for user in users %}
        <li>{{ user.name }}</li>
    {% endfor %}
</ul>
twig

Laravel si basa sul lin­guag­gio per i template “Blade”, svi­lup­pa­to ap­po­si­ta­men­te. A dif­fe­ren­za di Twig, i template Blade possono contenere qualsiasi codice PHP. Come in Twig, vengono ana­liz­za­te le espres­sio­ni tra doppie parentesi graffe e ne viene emesso il risultato. Lo stesso esempio in Blade:

<h1>Users</h1>
<ul>
    @foreach ($users as $user)
        <li>{{ $user->id }}</li>
    @endforeach
</ul>
blade

Ap­pli­ca­zio­ni web in Laravel e Symfony

I template sono suf­fi­cien­ti per siti web puramente in­for­ma­ti­vi senza par­ti­co­la­ri fun­zio­na­li­tà. Un sito viene composto al momento della chiamata sul server e trasmesso agli utenti vi­si­ta­to­ri. Con un livello cache, la soluzione risulta già ac­cet­ta­bi­le. Al contrario, le ap­pli­ca­zio­ni web ri­chie­do­no invece un approccio più ap­pro­fon­di­to.

Una classica ap­pli­ca­zio­ne “Web 2.0” richiede so­li­ta­men­te che gli utenti possano accedervi e quindi creare e mo­di­fi­ca­re i contenuti. In altri termini, è ne­ces­sa­ria un’ap­pli­ca­zio­ne database con le prin­ci­pa­li ope­ra­zio­ni CRUD per database. Per far sì che il tutto funzioni cor­ret­ta­men­te per più utenti, sono ne­ces­sa­rie soluzioni per l’au­ten­ti­ca­zio­ne, per la gestione delle au­to­riz­za­zio­ni e per la gestione della sessione.

In linea di principio, il lin­guag­gio PHP è dotato dei moduli necessari che offrono quindi fun­zio­na­li­tà per accedere ai cookie, gestire le sessioni e molto altro ancora. Altre funzioni rea­liz­za­bi­li sono il col­le­ga­men­to a un database, l’ese­cu­zio­ne di query e l’accesso ai valori della richiesta HTTP. L’utilizzo di serie di funzioni low-level astratte e di variabili globali come $_GET, $_POST e $_COOKIE è tuttavia limitato.

Nella pratica, i team di svi­lup­pa­to­ri avevano la tendenza a rein­ven­ta­re la ruota ogni volta per ogni nuova ap­pli­ca­zio­ne web, con la con­se­guen­te creazione di svariate soluzioni personali, piene di falle di sicurezza e carenti di do­cu­men­ta­zio­ne. Ciò che mancava era, infatti, un approccio stan­dar­diz­za­to o uno strumento modulare af­fi­da­bi­le che con­te­nes­se i necessari com­po­nen­ti di alta qualità. La logica con­se­guen­za è stata quindi la nascita di framework per lo sviluppo web.

Un ORM (Object-Re­la­tio­nal Mapping) funge da in­ter­fac­cia tra codice orientato agli oggetti e database re­la­zio­na­le. Un’app web vive delle in­te­ra­zio­ni tra gli utenti e i dati che cambiano nel tempo. Di solito, il livello ap­pli­ca­ti­vo è scritto in un lin­guag­gio di pro­gram­ma­zio­ne orientato agli oggetti, mentre il livello di ar­chi­via­zio­ne si basa su un database re­la­zio­na­le. Sia Laravel che Symfony hanno una propria im­ple­men­ta­zio­ne ORM dedicata.

L’ORM uti­liz­za­to in Symfony si chiama “Doctrine” ed è gestito come progetto in­di­pen­den­te. Doctrine si basa sul modello “Data Mapper” e comprende più com­po­nen­ti: oltre all’ORM è presente anche un livello di caching. L’ORM “Eloquent” di Laravel segue il modello “Active Records” ed è con­si­de­ra­to più facile da usare. Entrambi gli ORM possono essere collegati a svariati back end di database.

App scaf­fol­ding in Laravel e Symfony

Sia Laravel che Symfony includono una propria in­ter­fac­cia a riga di comando (CLI) per la gestione dei progetti, uti­liz­za­bi­le ad esempio per il co­sid­det­to “App scaf­fol­ding”. Con questo termine si intende la co­stru­zio­ne au­to­ma­tiz­za­ta di strutture di progetto, ad esempio com­po­nen­ti Model-View-Con­trol­ler o modelli di database.

La CLI di Laravel, nota come “artisan”, e il comando “bin/console” di Symfony con­ten­go­no una gran varietà di utili comandi. Ov­via­men­te, in­nan­zi­tut­to è ne­ces­sa­ria la presenza di un’apposita app Laravel o Symfony per poter accedere alla CLI stessa. Di solito, per l’in­stal­la­zio­ne iniziale di un’app Laravel o Symfony si utilizza Composer.

Vantaggi e svantaggi di Laravel e Symfony in breve

Laravel e Symfony sono framework PHP ben col­lau­da­ti. Laravel è con­si­de­ra­to più semplice e più adatto a progetti di minori di­men­sio­ni. La curva di ap­pren­di­men­to piatta e la rapidità di ot­te­ni­men­to dei risultati hanno con­tri­bui­to al successo del più popolare framework PHP.

Symfony è noto per il di­sac­cop­pia­men­to reciproco tra i suoi com­po­nen­ti, che possono essere usati insieme come framework web o sin­go­lar­men­te come parte di un software per­so­na­liz­za­to. Mentre Laravel punta sulla sem­pli­ci­tà, Symfony mira alla fles­si­bi­li­tà: ciò lo rende il framework più adatto a progetti complessi con requisiti speciali.

Vi mostriamo i vantaggi e gli svantaggi mettendo a confronto Symfony e Laravel in breve:

Criterio Symfony Laravel
Fun­zio­na­li­tà +++ ++
Maturità +++ +++
Facilità + ++
Fles­si­bi­li­tà +++ +
Usabilità + +++
Community ++ +++
In sintesi

Quale framework uti­liz­za­re a seconda dei casi? In poche parole, Laravel è la scelta migliore per i prin­ci­pian­ti e per i progetti più piccoli, mentre Symfony, grazie alla sua struttura modulare, risulta più adat­ta­bi­le alle varie con­di­zio­ni ed è quindi par­ti­co­lar­men­te adatto per ap­pli­ca­zio­ni complesse.

Vai al menu prin­ci­pa­le