Symfony o Laravel: quale framework PHP scegliere?

Symfony e Laravel sono i framework PHP più apprezzati: ormai maturi e ampiamente collaudati, entrambi presentano vantaggi e svantaggi tipici. Vi spieghiamo come funzionano 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 linguaggio di programmazione dedicato per il web. I “Personal Home Page Tools”, come questo linguaggio si chiamava all’inizio, permettevano di creare un documento HTML sul server in modo dinamico. Cerchiamo di capire meglio cosa significa.

I documenti HTML costituiscono la base delle informazioni presenti in rete, mentre la struttura dei contenuti veri e propri è data dai tag HTML. L’HTML diventa interessante nel momento in cui all’interno della struttura statica si inseriscono documenti programmati in modo dinamico. Ed è proprio qui che stava la rivoluzione portata dal PHP: un linguaggio che poteva essere incorporato nell’HTML e in altri documenti di testo. La struttura statica rimane inalterata, ma le informazioni dinamiche vengono inserite tramite righe di codice poste fra appositi “tag PHP”. Ad esempio, è possibile visualizzare il nome di un utente nel messaggio di benvenuto nel modo seguente:

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

Desiderate saperne di più sul linguaggio di scripting? Il tutorial su PHP descrive tutte le nozioni fondamentali e i primi passi.

Il sempre più frequente bisogno di funzionalità per applicazioni web, come il collegamento ai database, l’autenticazione degli utenti e la convalida dei moduli, ha portato alla comparsa di framework web per il PHP. Ponendosi a livello concettuale a metà strada fra libreria di programmazione e content management system, i livelli e i componenti di questi framework sono adatti alla creazione di sistemi di maggiori dimensioni. Nel frattempo, oltre a Laravel e Symfony sono stati sviluppati diversi altri framework PHP:

  • CakePHP, 2005
  • Symfony, 2005
  • CodeIgniter, 2006
  • Laminas Project, noto in precedenza come Zend Framework, 2006
  • Yii, 2008
  • Laravel, 2011

Symfony o Laravel

I framework web per PHP Laravel e Symfony condividono molti aspetti. Entrambi sono stati sviluppati come progetti open source e sono adatti alla creazione di applicazioni web basate su server. A tal fine, Laravel e Symfony sfruttano il pattern “MVC (Model-View-Controller)” per garantire la separazione degli aspetti più critici. Le richieste alle applicazioni web vengono elaborate da un controller, il quale gestisce i dati tramite il model e li presenta quindi alla view:

  • Model: modello e gestione dei dati
  • View: interfaccia utente
  • Controller: interfaccia fra model e view

Sia Laravel che Symfony hanno contribuito in modo determinante allo sviluppo dell’ecosistema PHP, dando vita entrambi a importanti progressi nelle tecnologie basate sul PHP, utilizzate anche in altri progetti. In particolare, Symfony è noto per la struttura modulare dei componenti, che sono disaccoppiati 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 installare e gestire ulteriori componenti. Composer è disponibile su tutti i sistemi operativi per server; pertanto, è possibile utilizzare il PHP con Composer su Ubuntu oppure utilizzarlo in pacchetti di web hosting IONOS.

Consiglio

Per il vostro sito web personalizzato utilizzate un web hosting veloce e sicuro, completo di dominio, con i pacchetti di web hosting di IONOS.

In questo articolo ci concentriamo sui framework Laravel versione 4+ e Symfony versione 2/3. Le versioni precedenti avevano strutture completamente diverse. Diamo uno sguardo più da vicino alle seguenti caratteristiche di Laravel e Symfony:

Caratteristiche Symfony Laravel
Templating Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Configurazione YAML PHP

Templating in Laravel e Symfony

L’idea del PHP di usare il “template” come modello per combinare componenti statici e dinamici era rivoluzionaria. In precedenza, era necessario combinare l’intero codice HTML a livello di programmazione mediante la concatenazione di stringhe composte da parti statiche e valori generati dinamicamente. Questo approccio era laborioso e tendente a errori, in quanto era difficile mantenere una visione d’insieme.

Oltre all’incorporazione di codice in testi statici, anche i cosiddetti “include” hanno contribuito notevolmente al successo del PHP. Il comando include consente di riunire più elementi in un singolo sito. In questo modo è possibile realizzare layout coerenti, ossia più pagine con contenuti diversi ma con lo stesso menu di navigazione.

Per templating si intende quindi la creazione di documenti HTML partendo da modelli statici e componenti dinamici. Se utilizzato direttamente come linguaggio per i template, il PHP mostra rapidamente alcuni seri svantaggi. Poiché in un file PHP si mescolano contenuti HTML, PHP, SQL, CSS e JavaScript, viene a mancare una valida separazione fra i vari aspetti. Inoltre si verificano vulnerabilità dovute alla SQL injection e al cross-site scripting (XSS).

Per prevenire questi effetti negativi, sia Laravel che Symfony utilizzano i propri linguaggi di template, che acquisiscono i dati e li utilizzano per renderizzare l’HTML. Questo sistema permette di garantire una valida separazione fra i vari aspetti, ripulisce automaticamente l’output tramite una cosiddetta procedura di “escaping” e previene l’iniezione di codice. I documenti PHP o HTML così creati possono essere memorizzati temporaneamente in una cache.

Il linguaggio per i template di Symfony (“Twig”) permette di creare complesse famiglie di documenti, complete di layout, *partial *e componenti. 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 linguaggio per i template “Blade”, sviluppato appositamente. A differenza di Twig, i template Blade possono contenere qualsiasi codice PHP. Come in Twig, vengono analizzate le espressioni 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

Applicazioni web in Laravel e Symfony

I template sono sufficienti per siti web puramente informativi senza particolari funzionalità. Un sito viene composto al momento della chiamata sul server e trasmesso agli utenti visitatori. Con un livello cache, la soluzione risulta già accettabile. Al contrario, le applicazioni web richiedono invece un approccio più approfondito.

Una classica applicazione “Web 2.0” richiede solitamente che gli utenti possano accedervi e quindi creare e modificare i contenuti. In altri termini, è necessaria un’applicazione database con le principali operazioni CRUD per database. Per far sì che il tutto funzioni correttamente per più utenti, sono necessarie soluzioni per l’autenticazione, per la gestione delle autorizzazioni e per la gestione della sessione.

In linea di principio, il linguaggio PHP è dotato dei moduli necessari che offrono quindi funzionalità per accedere ai cookie, gestire le sessioni e molto altro ancora. Altre funzioni realizzabili sono il collegamento a un database, l’esecuzione 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 sviluppatori avevano la tendenza a reinventare la ruota ogni volta per ogni nuova applicazione web, con la conseguente creazione di svariate soluzioni personali, piene di falle di sicurezza e carenti di documentazione. Ciò che mancava era, infatti, un approccio standardizzato o uno strumento modulare affidabile che contenesse i necessari componenti di alta qualità. La logica conseguenza è stata quindi la nascita di framework per lo sviluppo web.

Un ORM (Object-Relational Mapping) funge da interfaccia tra codice orientato agli oggetti e database relazionale. Un’app web vive delle interazioni tra gli utenti e i dati che cambiano nel tempo. Di solito, il livello applicativo è scritto in un linguaggio di programmazione orientato agli oggetti, mentre il livello di archiviazione si basa su un database relazionale. Sia Laravel che Symfony hanno una propria implementazione ORM dedicata.

L’ORM utilizzato in Symfony si chiama “Doctrine” ed è gestito come progetto indipendente. Doctrine si basa sul modello “Data Mapper” e comprende più componenti: oltre all’ORM è presente anche un livello di caching. L’ORM “Eloquent” di Laravel segue il modello “Active Records” ed è considerato più facile da usare. Entrambi gli ORM possono essere collegati a svariati back end di database.

App scaffolding in Laravel e Symfony

Sia Laravel che Symfony includono una propria interfaccia a riga di comando (CLI) per la gestione dei progetti, utilizzabile ad esempio per il cosiddetto “App scaffolding”. Con questo termine si intende la costruzione automatizzata di strutture di progetto, ad esempio componenti Model-View-Controller o modelli di database.

La CLI di Laravel, nota come “artisan”, e il comando “bin/console” di Symfony contengono una gran varietà di utili comandi. Ovviamente, innanzitutto è necessaria la presenza di un’apposita app Laravel o Symfony per poter accedere alla CLI stessa. Di solito, per l’installazione 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 collaudati. Laravel è considerato più semplice e più adatto a progetti di minori dimensioni. La **curva di apprendimento piatta e la rapidità di ottenimento dei risultati **hanno contribuito al successo del più popolare framework PHP.

Symfony è noto per il disaccoppiamento reciproco tra i suoi componenti, che possono essere usati insieme come framework web o singolarmente come parte di un software personalizzato. Mentre Laravel punta sulla semplicità, Symfony mira alla flessibilità: 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
Funzionalità +++ ++
Maturità +++ +++
Facilità + ++
Flessibilità +++ +
Usabilità + +++
Community ++ +++
In sintesi

Quale framework utilizzare a seconda dei casi? In poche parole, Laravel è la scelta migliore per i principianti e per i progetti più piccoli, mentre Symfony, grazie alla sua struttura modulare, risulta più adattabile alle varie condizioni ed è quindi particolarmente adatto per applicazioni complesse.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.