Laravel e Symfony sono due framework PHP molto popolari. Symfony viene lanciato nel 2007, con l’obiettivo di fornire uno strumento in grado di semplificare il lavoro degli sviluppatori, lasciando anche molta libertà di utilizzare in maniera indipendente parti del suo codice anche in altri progetti.

Laravel, lanciato nel 2011, nasce come progetto indipendente, sviluppato utilizzando parte del codice di Symfony, ma con una filosofia diversa: permettere allo sviluppatore di creare del codice pulito, elegante e più intuitivo.

Ad oggi se parliamo di Laravel ci riferiamo alla versione 4 del 2013, con la quale il framework è stato completamente riscritto; stessa cosa vale per Symfony, al quale facciamo riferimento a partire dalla versione 2 del 2011.

Volendoci soffermare sulle differenze tra i due framework dobbiamo iniziare dalla filosofia con cui sono stati creati.

Symfony, come detto, lascia molta libertà di utilizzare in maniera indipendente le sue varie parti, anche in altri progetti. Laravel, al contrario, ha una struttura grazie alla quale abbiamo un codice semplice e pulito che, in realtà, è espressione di librerie molto complesse.

Questa differenza si rispecchia anche in tutti i componenti inclusi nei i due framework:

  • Engine Template: Blade di Laravel e Twig di Symfony; entrambi generano template PHP e sono molto veloci, ed implementano strutture di controllo, come ad esempio istruzioni e loop. Blade a differenza di Twig permette di includere del codice PHP e offre una semplicità di lettura e di interpretazione dell’erditarietà dei template migliore.
  • ORM(Object-Relational Mapping): Eloquent di Laravel e Doctrine2 di Symfony, dove la differenza fondamentale è che in Doctrine2 l’oggetto è definito come una “classica” classe PHP mentre in Eloquent questo eredita tutte le proprietà dell’ORM. Esempio;
    • In Eloquent una classe User è in caso non abbia ad esempio delle relazione, una classe vuota
      class User extends Eloquent {}
    • Mentre in Doctrine la stessa classe appare così
      <?php
      use Doctrine\ORM\Mapping AS ORM;
      /**  
      * @ORM\Entity  
      * @ORM\Table(name="users")  
      */  
      class User  
      {  
      /**  
      * @ORM\Id  
      * @ORM\GeneratedValue  
      * @ORM\Column(type="integer")  
      */  
      private $id;
      /**  
      * @ORM\Column(type="string")  
      */  
      private $name;  
      }  

    Piochè l’oggetto in Doctrine2 è semplice PHP, non può utilizzare dei metodi propri dell’ORM come ad esempio save() e bisogna affidarci ad un servizio detto Entity Manager, che si occuperà di eseguire il comando. Questo però non esclude il fatto che Doctrine2 possa vantare di un linguaggio orientato alle query estremamente potente, che permette un controllo totale sul database, cosa che non sempre accade con Eloquent.

  • Popolarità: benchè non si scelga un framework per la popolarità, ci sono grossi benefici che derivano da un largo utilizzo di questo. Laravel è ad oggi il framework più popolare, Symfony è comunque il secondo. Con la popolarità arriva una grande quantità di informazioni e supporto online. Per Laravel, i tutorial su Laracasts possono fornire informazioni eccellenti che Symfony attualmente non fornisce, e sebbene Symfony condivida ancora un’ottima documentazione, le risorse non sono così estese come quelle di Laravel.

Entrambi i framework sono molto validi, simili per certi aspetti e con numerose funzionalità. Personalmente il motivo per cui preferisco Laravel è la semplicità di apprendimento, infatti è possibile impararne rapidamente i passaggi più importanti, necessari per mettere online il proprio progetto e dargli funzionalità basilari, senza senza dover scrivere più codice del dovuto.