Laravel 5.2 - Ci Siamo!

Pronti per Laravel 5.2? Manca davvero poco... nel frattempo, per saperne di più, ecco una panoramica delle nuove feature!
francesco
Francesco Malatesta
20/12/2015 in News

Laravel 5.2 è alle porte, manca davvero poco. Tra le release note sul sito è già presente, ma avviando l'installazione tramite Composer viene ancora presa in considerazione, come ultima versione, la 5.1.11.

In ogni caso si, siamo agli sgoccioli.

Cosa ci aspetta in questa nuova versione del Framework, ad ogni modo?

Model Binding Implicito

Alcuni conoscono già la sintassi Route::model(). Da oggi, però, sarà possibile effettuare l'injection dei model direttamente nelle route o nei controller, con una sintassi simile alla seguente.

use App\User;

Route::get('/user/{user}', function (User $user) {
    return $user;
});

In questo esempio, Laravel automaticamente crea un'istanza del model User usando come riferimento il parametro {user} passato alla route. Una shortcut abbastanza comoda, direi!

Autenticazione

Le novità più succose di questa versione riguardano sicuramente l'autenticazione.

Multi Auth!

Mi ricordo, un paio d'anni fa, di aver usato un package chiamato "multi-auth" per poter lavorare agevolmente con più model diversi per quanto riguarda l'authentication. A partire dalla 5.2, Laravel conterà questa feature out of the box. Supponendo che la tua applicazione abbia, ad esempio, un model Admin ed uno User, sappi che ora potrai usarli entrambi senza problemi.

Scaffolding

Abbiamo già visto in passato come Laravel metta a disposizione svariati controller/utility pronti ad essere usati per quanto riguarda l'autenticazione. Da oggi con il comando

php artisan make:auth

sarà possibile effettuare lo scaffolding di tutto quello che riguarda l'autenticazione di un utente, incluse delle view compatibili con bootstrap per login, registrazione, recovery e reset della password.

Gruppi di Middleware

Hai definito una marea di middleware diversi e ti da fastidio doverli includere in ogni singolo controller, tutte le volte? No problem! In Laravel 5.2 saranno introdotti i gruppi di middleware.

Vediamo un esempio (siamo nel file Kernel.php):

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

Come vedi, è stato creato un gruppo web ed uno api. A questo punto, si potranno richiamare tali middleware, tutti insieme, specificando il nome del gruppo nel controller o route che ci interessa:

Route::group(['middleware' => ['web']], function () {
    //
});

Ottimo direi!

Rate Limit

Un'altra feature piuttosto utile è la possibilità di specificare, tramite un apposito middleware, un limite alle chiamate in un certo arco di tempo per un determinato indirizzo IP.

Ad esempio, per specificare un limite di 60 richieste per minuto per un singolo indirizzo, basterà usare la sintassi:

Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
    //
}]);

Validazione di Array

Il sistema di validazione di Laravel è robusto e fa decisamente bene il suo dovere, ma questa nuova piccola aggiunta sarà sicuramente molto utile.

Supponendo di avere degli array di elementi da validare, sarà possibile ad esempio verificare che ogni indirizzo email sia valido e non presente sul database:

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users'
]);

Miglioramenti ai Global Scope

Sono stati apportati alcuni miglioramenti alla definizione dei global scope in Eloquent, fino ad oggi abbastanza soggetti ad errori. Per saperne di più basterà dare un'occhiata qui.