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 come backend per fornire i dati al client (ed essere usato, ad esempio, con Vue, React o Angular) o anche come 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.
Come vedremo nel prossimo articolo, l’installazione di partenza di Symfony 4 è davvero minimale, ma il suo ecosistema è composto da componenti per ogni esigenza:
- Twig, un potente template engine, con cui curare il lato presentazionale;
- Sistema delle rotte sofisticato, un meccanismo con cui si danno dei nomi alle URI, che come vedremo è un vantaggio reale;
- Doctrine, un ORM, con cui interfacciarsi agevolmente al DB, indipendentemente dal DBMS che si usa;
- Profiler, una toolbar per il debugging da cui tenere d’occhio metriche importanti (tempi di esecuzione, numero di query effettuate, errori, e così via);
- Sistema delle traduzione per agevolare la costruzione di siti multilingua;
- Sistema di sicurezza, con cui gestire autenticazione e autorizzazioni;
- Diversi sistemi di logging, con cui tenere traccia dei messaggi generati automaticamente dal framework o per registrare messaggi ad hoc;
- Sistema di caching integrato, con cui velocizzare l’esecuzione di alcuni dei componenti sopra citati;
- Gestione di base degli assets molto maneggevole. Se si ricerca qualcosa di più particolare, è comunque molto incline ad essere utilizzata con strumenti di bundling sofisticati, come Webpack (attraverso il package Encore).
Come studiare
Symfony è un progetto complesso. Utilizza molti pattern, linguaggi e strumenti, che potreste non conoscere. Dovrete usare fin da subito Composer e avrete a che fare con Twig, Yaml e altri nomi strani. Inoltre i concetti che sono dietro al framework spesso non sono tra i più semplici.
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, 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 (strizzata d’occhio paracula). 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. Se vi sentite un po’ arrugginiti, una fonte assolutamente ottima da cui studiare PHP (con qualche cenno di programmazione ad oggetti) è PHP: the right way (c’è anche una versione in italiano).
Userete moltisimo il terminale, per cui è bene sapersi muovere in una shell.
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 efficaci.
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.