Grazie all’esperienza pluriennale nella realizzazione di siti in Symfony, CakePHP o Laravel, possiamo sviluppare applicazioni web complesse ed estensibili. Vediamo 10 vantaggi per sviluppare un sito in Laravel, con un approccio di apprendimento e confronto diretto per chi viene da CakePHP.

Un framework PHP MVC consente infatti di:
– sviluppare applicazioni in modo relativamente veloce
– scrivere codice riusabile secondo il principio DRY (Do not Repeat Yourself)
– separare la base dati (Model) dalla loro visualizzazione (View) e dalle logiche di business (Controller) con cui vengono trattati
– offrono il mantenimento del valore nel tempo grazie alla loro modularità e scalabilità
– offrono un grado di sicurezza maggiore rispetto a piattaforme come WordPress
– a livello di sviluppo, garantiscono una documentazione e una community di sviluppatori su scala mondiale

Futuraweb dal 2006 realizza siti con CakePHP, laddove per progetti ad elevata complessità, abbiamo scelto framework ancora più robusti come Symfony o Zend (è il caso, ad, esempio del refactoring di derev.com).

Da alcuni mesi alla “famigliola” si è aggiunto Laravel, che da più di un anno è sulla cresta dell’onda nelle community di sviluppatori PHP. Vediamo allora i 10 vantaggi per cui vorreste richiedere alla nostra agenzia di creare un sito in Laravel.

Google trends PHP frameworks1. Laravel sembra un framework pensato e sviluppato secondo una logica “pronti e via” (soprattutto per chi viene da altri framework più complessi come Symfony o Zend): per fare un esempio, se Symfony è un manuale di 500 pagine, Laravel è un bigino da 100 che contiene tutto quello che serve, e non richiede troppo tempo, né a livello di documentazione, né di scrittura del codice. In sostanza

2. La curva di apprendimento è molto simile a quella di CakePHP, ovvero medio-bassa, laddove gli altri due big richiedono una seniority più avanzata. Il livello di supporto (documentazione e supporto della community) è al contempo tra i più elevati. Senza dimenticare di citare Laracasts, un catalogo di video tutorial fatti molto bene per aiutare neofiti ed esperti.

3. Laravel ha un livello standard di performance e di sicurezza paragonabile a quelli di Symfony e Zend. Anche perché Laravel utilizza nel proprio core componenti Symfony. Insomma non reinventa la ruota ma adotta librerie collaudate per garantire affidabilità e stabilità a costo zero.

4. A livello di templating, Twig è lo stesso layer utilizzato da Symfony, e in più si può optare per Blade, che è ancora più flessibile.

5. A livello di ORM, Eloquent si base sul pattern di tipo Active Record (banalizzando una riga nel database equivale a un oggetto nell’applicazione). Per la maggioranza dei progetti, che non richiedono volumi di dati e query lanciate contemporaneamente ingenti, e che non richiedono complesse strategie di test dell’applicativo, l’approccio di tipo Active Record resta la soluzione oggi più veloce a livello di sviluppo. E’ sempre vero che si può scegliere di sostituire Eloquent con Doctrine (l’abstraction layer usato da Symfony) che essendo un Data Mapper consente di astrarre le entità dall’architettura del database utilizzata. Chi viene da CakePHP, si troverà a casa:

CakePHP

$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->get($articleID);
$article->title = "Nuovo titolo";
$articlesTable->save($article);

Laravel

$article = App\article::find($articleID);
$article->title = "Nuovo titolo";
$article->save();

6. Sempre a livello di dati, le Migrations consentono di trattare la base dati senza toccare direttamente le tabelle. Tipico nel caso in cui occorre collaborare con più persone sullo stesso progetto, e interagire con versioni diverse che hanno database personalizzati.

7. Coding elegante e pulito. Quando si ha a che fare con progetti complessi, e i tempi di rilascio stringono, è facile sporcare il codice. Per questo la scelta di un framework con regole potenti ma semplici fa la differenza. Specie quando il codice passa in manu altrui dopo diverso tempo, e occorre fare un’analisi tecnica funzionale dell’architettura e delle logiche.

8. Artisan è una interfaccia da riga di comando (CLI) che permette di effettuare in pochi secondi operazioni quali creare tabelle, files, lanciare test, svuotare cache e altri comandi. P.e. per creare una classe di eventi legata a un acquisto, basta questa riga di comando

php artisan make:event ProdottoAcquistato

per creare la struttura base che andremo a completare con le nostre logiche. E tanto che ci siamo, per mettere i processi in coda usiamo:

php artisan handler:event EmailNotificaProdottoAcquistato --event=ProdottoAcquistato --queued

9. Ottimo e veloce per scrivere API. Il sistema di Routing è abbastanza potente per permettere di creare servizi RESTful con cui interfacciare verso l’esterno i nostri dati. Ricordando, per semplificare, che una API ci permettere di intervenire sugli oggetti della nostra base dati, senza la necessità di dever accedere in modo diretto al database, sarà possibile con poche righe scrivere una piccola applicazione, raggiungibile a una determinata URL, che visualizza in tempo reale l’elenco dei nostri prodotti di una determinata tipologia in formato JSON (quindi “masticabile” sia da linguaggi sia server-side che client-side). In questo modo avremo dati disponibili per essere integrati con un gestionale offline, una App mobile, un’applicazione sui social.

Ecco un banale esempio da inserire nel file di routing per esportare il catalogo prodotti (campi nome e prezzo) in formato Json, alla URL dominio.com/api/prodotti/

Route::get('/api/prodotti/{id?}', ['middleware' => 'auth.basic', function($id = null) {
$prodotti = App\Prodotto::all(array('id', 'nome', 'prezzo'));

return Response::json(array(
'error' => false,
'prodotti' => $prodotti,
'status_code' => 200
));
}]);

Il codice in CakePHP sarebbe molto simile, salvo che Laravel ci consente di utilizzare addirittura poche righe in un unico file, in cui effettuare queste operazioni: controllare l’autenticazione dell’utente, prendere i dati, esporli in formato Json. Il sistema di Routing di Laravel infatti è molto sintetico e potente, ma questo ci permette anche di introdurre i middleware.

10. Facciamo un esempio semplice per far capire la potenza e la flessibilità dei middleware. Nella pagina di account del nostro portale, l’utente può caricare e modificare l’immagine del proprio profilo. Il nostro middleware consiste in uno strato di operazioni che vengono eseguite prima e dopo il processo di upload della foto: gestiamo e validiamo il file caricato (per esempio deve essere in formato PNG o JPG e non deve superare 3Mb), salviamo il file temporaneo, lo copiamo nella cartella del filesystem dedicata, generiamo una thumbnail, cancelliamo il file temporaneo, associamo la nuova thumbnail a record dell’utente sul database, ricarichiamo la pagina di profilo aggiornata. In sostanza i middleware servono a gestire richieste HTTP prima che vengano passate a un controller, filtrando via le request che non sono ritenute “buone” o utili. Il bello è che potete farlo eseguire sempre ad ogni request dell’applicazione, aggiugendolo all’array in cui sono contenuti tutti i middleware (App\Http\Kernel.php), oppure associarlo direttamente nel file di routing a singole rotte.