Introduzione a Symfony 4

Articolo introduttivo a Symfony, per affrontare con lo spirito giusto uno dei migliori (ma complessi) framework PHP in circolazione

Symfony introduzione

Benvenuti nel primo di una serie di articoli su Symfony 4, uno dei migliori framework PHP attualmente in circolazione.

Cos’è un framework?

Innanzitutto bisogna capire di cosa stiamo parlando. Si può affermare che un framework non sia altro che uno strumento con due scopi fondamentali:

  • Offrire scorciatoie con le quali compiere determinate azioni;
  • Imporre dei paletti al progetto;

Il primo punto penso sia abbastanza intuitivo. Un framework deve dare gli strumenti per compiere facilmente e velocemente azioni standard, come, ad esempio, la gestione automatica di alcuni tipi di vulnerabilità di sicurezza. Avrete le spalle coperte e molte meno rogne a cui pensare. Probabilmente è questa la ragione che vi ha spinto verso questa strada e non vi biasimo affatto: la produttività è fondamentale per un buon programmatore.

Il secondo punto può sembrare un limite, invece è tutto il contrario. Imporre dei paletti significa dare una struttura precisa al progetto, utilizzare determinati pattern, costringere tutti gli sviluppatori a seguire delle linee guida, a fine di avere tra le mani un progetto manutenibile e scalabile. Sia chiaro, non esiste al mondo un modo per impedire le boiate, ed è per questo che vi consiglio di concentrare moltissimo la vostra attenzione sui primi articoli della serie, in cui si capisce in che modo Symfony ragioni.

Perché Symfony?

È ottimamente documentato ed ha alle spalle una florida community che contribuisce alla sua evoluzione e al suo mantenimento. Sono ormai più di tre anni che uso Symfony e non ci sono mai stati bachi di sicurezza importanti. Trovo il progetto molto ben strutturato e penso che la quarta edizione abbia apportato ulteriori miglioramenti, grazie ad una filosofia che mira a semplificare e rendere il progetto flessibile, ma potente. Symfony è infatti in grado di adattarsi ad ogni situazione, per essere utilizzato in piccoli, medi o grandi progetti e di qualunque tipologia: può essere usato come piattaforma full-stack o per fornire semplicemente i dati al client (ed essere usato, ad esempio, con Vue, React o Angular) o anche fornire un sistema di API (REST o GraphQL). Inoltre, Symfony ha ridato vita a tutto l’ecosistema PHP, contribuendo a definire nuovi standard, e, grazie all’accoppiata con PHP 7, oggi rappresenta uno strumento all’avanguardia e ampiamente utilizzato in campo lavorativo, a cui contribuisce anche la licenza MIT.

Component e framework

Per evitare confusione, bisogna chiarire che la parola Symfony comprende due parti distinte:

  • I Components;
  • Il Framework;

I Symfony Components sono delle librerie che possono essere integrate in un qualsiasi progetto PHP. Sono delle utilities in grado di risolvere una determinata problematica (gestione delle rotte, sistema di template, gestione delle mail, ecc), senza dare una struttura al progetto.

Symfony Framework, a cui siamo interessati con questo corso, è invece quello grado di aiutarvi ad organizzare i vostri file, che impone i propri pattern e il proprio file system. I Components sono tipicamente ampiamente utilizzati all’interno di Symfony Framework.

In questo corso ci concentreremo sul framework, perciò quando dico Symfony, mi rifersisco a quello. A proposito, si chiama Symfony, non Symphony, porca di quella miseriaccia.

Come studiare

Symfony è un progetto complesso. Utilizza molti pattern e potrebbe coinvolgere strumenti come Composer o protocolli come SSH, che potreste non conoscere. Quando mi ci sono avvicinato per la prima volta, nel 2015, mi aspettavo un enorme zip con dei file PHP, invece mi sono ritrovato a dover giostrare tra Twig, Yaml e parecchi altri nomi estranei.

Insomma, se vi sentirete spaesati e affranti, consolatevi, è del tutto normale: Symfony è un ecosistema, composto da strumenti di una portata enorme. La buona notizia, però, è che la documentazione è ottima e la community è molto attiva sui forum di supporto, tutte cose essenziali per un progetto pubblico. Ovviamente potete sostituire i vostri genitori naturali con GitHub e StackOverflow, perché tutti i problemi che avrete (e li avrete), potrebbero essere già stati affrontati e risolti da altri sviluppatori. Sul sito ufficiale trovate molto materiale aggiuntivo, come quello delle Best Practice e, se volete rimanere costantemente aggiornati sulle ultime novità, trovate anche un blog.

Purtroppo, devo ammettere che, se non avete molta dimestichezza con l’inglese, potreste trovarvi in difficoltà ed è questo, principalmente, il motivo che mi ha spinto a scrivere su Symfony. Tuttavia la documentazione è la Bibbia, perciò, cercate di farne la prima fonte da consultare.

Prerequisiti

Non nascondo che bisogna avere qualche conoscenza pregressa prima di potersi muovere sulle proprie gambe. In fondo in fondo Symfony è PHP e spesso la difficoltà reale deriva dalla scarsa conoscenza di PHP stesso. Saper programmare ad oggetti è un prerequisito necessario, quindi bisogna capire bene come funziona l’ereditarietà delle classi, la differenza tra gli indicatori di visibilità (public, private, protected), i concetti di overwriting e overriding, e così via.

Userete moltisimo il terminale, per cui è bene sapervi muovere in una shell Unix (sono su una macchina Debian based, ma adattevi al vostro contesto).

Infine direi che è essenziale sapere come funziona il modello client-server e conoscere il protocollo HTTP, cosa non banale come sembra.

Strumenti

Sarete pappa e ciccia con il terminale. Molte operazioni proprie di Symfony sono gestite con l’applicativo da linea di comando console, che vedremo più in là, e userete sicuramente altri applicativi, come Composer e Git, che introduco di seguito.

Composer è ormai adottato da Symfony come standard. Si tratta di uno strumento con il quale gestirete le dipendenze del vostro progetto. Con un semplice comando potete scaricare, ad esempio, la libreria per gestire l’invio delle mail e integrarla altrettanto facilmente nel codice.

Git non è fondamentale, ma ve lo consiglio fortemente. Si tratta di un sistema di versionamento, con cui potete tenere traccia dei cambiamenti nel vostro progetto e lavorare in sicurezza, riducendo il rischio di combinare guai, ma soprattutto, aiuta a sincronizzare il lavoro tra i vari sviluppatori di un progetto (se no come vi passate il lavoro, con la pennina USB?).

Editor e IDE

Non sono uno di quelli che smanetta per intere notti al fine di trovare l’intruglio di plugin adatto a far ruotare il PC per essere usato come ventilatore (eh sì, mentre scrivo fa molto caldo), quindi non ho fatto chissà quale ricerca, ma, dall’alto della mia esperienza, posso consigliarvi due strumenti indubbiamente idonei.

Il primo è un IDE di JetBrains, PhpStorm, complesso, potente, vi aiuta in un sacco di cose. Sa che si tratta di un progetto Symfony, perciò sa bene anche in che modo aiutarvi (insomma, è questo il bello degli IDE). Ad esempio, quando digitate il nome di una classe, è in grado di importare automaticamente la libreria necessaria.

Il secondo è un editor, SublimeText. Ovviamente non ha l’intelligenza di un IDE (anche se so che esistono plugin con cui ci si avvicina molto), perciò molte operazioni dovete farle manualmente, ma lasciatemelo dire: meglio così se siete alle prime armi. Nasconderete un po’ di magia sotto al tappeto e capirete meglio come funzionano realmente le cose. Lo uso da anni e non ho la minima intenzione di cambiare. Uso ampiamente le shortcut da tastiera, che rendono il lavoro molto rapido (sono uno di quelli che ripudia il mouse), sono amante dell’editing in colonna (ormai irrinunciabile), ed esistono plugin per l’highlighting di qualsiasi linguaggio (prendetemi per il culo, ma certe volte lo uso pure per programmare in Java).

Nel prossimo articolo vedremo come creare un nuovo progetto Symfony 4.

L'autore

Ciao, sono Antonio D'Amore, e sono un ingegnere informatico con la forte passione per il web. Sguazzo nell'ambiente startup, grazie a Tobevy, di cui sono co-founder e CTO, e adoro la divulgazione, ragion per cui ho creato questo blog