Laravel 5: cosa cambia?

0
49

Lo so, ve ne siete già accorti: Laravel 5 è ormai prossimo all’uscita.

Qui a Laravel-Italia siamo tutti impazienti di vedere come verrà recepito dalla community, e alcuni di noi già ci stanno giocando. Personalmente, ci ho già realizzato un primo progettino ad uso personale.

Comunque sia, in generale l’hype è tanto ed è quasi il momento di cominciarne a parlare seriamente. Nei prossimi mesi sono tante le iniziative che avranno luogo qui sopra, ma conviene sempre iniziare con una giusta introduzione. Così eccomi qui, a scrivere un articolo di overview sui cambiamenti e novità introdotti da questa ultima versione del nostro framework preferito.

Una delle domande che ho sentito di più negli ultimi giorni, infatti, è stata:

Ma cosa cambia rispetto a prima? Dici che devo usarlo?

Un finto entusiasta risponderebbe certo, che domande!

Io invece, da entusiasta vero, dico che è meglio leggere questo articolo per vedere quanti e quali, in effetti, sono i miglioramenti.

Nuova Struttura delle Directory

La prima cosa che salta all’occhio è la sostanziale differenza della struttura delle directory in un nuovo progetto standard creato con Laravel 5 rispetto alla sua controparte in L4.

Le cartelle nella root directory sono molte di più ma in generale il progetto è organizzato molto meglio.

In linea di massima, la struttura incoraggia molto l’uso delle classi dove prima era consentito lavorare anche con file da includere al volo, come per esempio avveniva con i Filtri. O magari con i ServiceProvider, che ora usano la cartella _app/Providers.

In app è rimasto quello che effettivamente riguarda solo la nostra applicazione, e non quello che ci gira intorno. In resources ora troviamo tutti i nostri asset, dalle view ai file di lingua. In app/Http troviamo tutto quello che riguarda la nostra web application (questa mossa mi è piaciuta davvero tanto).

Inoltre, l’intera cartella app adesso è sotto namespace. Il che significa maggiore ordine per il codice, in tutti i sensi.

Tale namespace si potrà cambiare al volo, comunque, tramite il comando

php artisan app:name NuovoNome

Nota: questo comando cambierà il namespace in TUTTI i file senza ulteriori operazioni da effettuare.

Contratti, contratti e ancora contratti!

Astrarre è bello. Punto.

Astrarre è comodo. Punto.

Astrarre è elegante. Punto.

Nel repository illuminate/contracts è possibile trovare tutte le varie interfacce implementate dai vari componenti del framework. Sicuramente un bel passo avanti, considerando che potrai sviluppare il tuo componente perfetto in caso di bisogno.

Middleware

In Laravel 4 siamo stati abituati ad usare i filtri. In L5 il discorso cambia e vengono introdotti i Middleware. A differenza del passato ogni Middleware consisterà in una classe: niente più file con mille definizioni al suo interno.

Route Caching

Tramite Route Caching sarà possibile mettere in cache le varie route generate e velocizzare enormemente (soprattutto in caso di applicazioni con tante, tante route) l’esecuzione.

Il tutto tramite un semplice

php artisan route:cache

… la documentazione comunque ne consiglia l’uso in applicazioni con più di 100 route, per apprezzarne meglio la potenzialità.

Event Object

Mantenendo la linea adottata con i Middleware, in L5 tutto tende a diventare un oggetto. Gli eventi non fanno eccezione, dato che sarà possibile crearli implementando nuove classi.

Ecco un esempio di evento:

class BookWasPurchased {

public $book;

public function __construct(Book $book)
{
$this->book = $book;
}

}

// lanciamo l’evento!
Event::fire(new BookWasPurchased($book));


// definiamo un listener… con una classe, stavolta!
class ReportBookPurchase {

public function handle(BookWasPurchased $event)
{
// qui va la logica…
}

}

Molto meglio delle classiche stringhe, vero?

Socialite

Laravel Socialite è un altro interessante package che si è aggiunto alla cricca in questa nuova ultima versione.

In poche parole, permette di effettuare l’accesso alla propria applicazione realizzata su Laravel 5 usando i vari social network più conosciuti, da Facebook a Twitter, passando per Github.

Il tutto con uno stile unificato, come prassi ormai per tutti i package di un certo livello. Ecco un esempio:

public function redirectForAuth()
{
return Socialize::with(‘twitter’)->redirect();
}

public function getUserFromProvider()
{
$user = Socialize::with(‘twitter’)->user();
}

L’accesso viene effettuato via OAuth.

Flysystem per il Filesystem

Sembra quasi uno slogan elettorale… comunque, un’altra bella novità è l’introduzione di Flysystem per la gestione del Filesystem della nostra applicazione.

Flysystem è un package della League che consente di astrarre in modo molto elegante e comodo tutto l’insieme delle operazioni che effettuiamo sui file.

Tramite un semplice cambio di driver potremo lavorare senza problemi, con la stessa identica sintassi, con il filesystem locale oppure via FTP, o ancora su Rackspace o magari su Amazon S3. Senza doverci curare effettivamente di dove siamo.

Astrazione is the way.

Iniezione di Metodi dal Controller

Se abbiamo già lavorato con Laravel in passato sappiamo bene cos’è la Dependency Injection. Abbiamo sicuramente, almeno una volta, inserito le dipendenze di una classe tramite il costruttore dell’utilizzatrice di queste dipendenze.

Bene: con Laravel 5 sarà possibile effettuare l’injection anche in un qualsiasi metodo del controller, lasciando al Container di Laravel il compito di risolvere le istanze in questione.

Ecco l’esempio riportato sulla documentazione, che rende l’idea:

public function createPost(Request $request, PostRepository $posts)
{
//
}

Nota: molto interessante è la possibilità di inserire dei parametri nella route corrispondente ad un metodo che fa uso di method injection e vedere come Laravel risolve automaticamente il tutto.

Ecco un altro esempio per capire meglio il concetto. Supponiamo di avere questo metodo:

public function createPost(Request $request, PostRepository $posts, $authorId)
{
//
}

… ed ecco la sua route corrispondente:

Route::post(‘posts/create/{authorId}’, ‘PostsController@createPost’);

Laravel, in modo autonomo, risolverà le prime due dipendenze lasciando alla route solo il terzo parametro.

Autenticazione in 5 Minuti

Quante volte capita di dover implementare un sistema di autenticazione nella nostra applicazione? Praticamente sempre.

Partendo da questo presupposto, in Laravel 5 è già disponibile out of the box un intero insieme di componenti per realizzare un auth system di base.

Dal controller alla view, seguendo tutto il flusso. Come già visto in Laravel 4, inoltre, è presente già un model User pronto all’uso.

Tutto qui?

In realtà no: ho voluto solo accennare le cose più interessanti, più importanti o più appetibili. Probabilmente, finito questo articolo avrai voglia di provare un paio di queste features… in tal caso, ti basta un:

composer create-project laravel/laravel PrimoTestLaravel5 dev-develop

… che aspetti?