Présentation des nouveautés introduites avec Laravel 5.3

La version 5.3 de Laravel a été présentée fin juillet 2016 à la conférence Laracon US 2016 par Taylor Otwell, le créateur du framework Laravel. C'est peu de temps après, le 9 septembre 2016, que la version 5.3 a été publiée avec son lot de nouveautés.

La version 5.3 n'est pas une version LTS (Long Term Support), contrairement à la version 5.1 de Laravel. Une version LTS offre un support de 2 ans pour les bogues et de 3 ans pour les correctifs de sécurité. Une version normale de Laravel est limitée à 6 mois pour les bogues et à un an pour les patches de sécurité.

Les notifications

Cette nouvelle fonctionnalité permet d'envoyer des notifications à travers différents canaux comme les mails, les SMS (depuis la plateforme Nexmo) et Slack.
Chaque notification est représentée par une classe générée automatiquement par Laravel.

La commande suivante permet de créer un squelette de notification :


$ php artisan make:notification JobCompleted

La classe contient un ensemble de méthodes en liaison avec les différents canaux possibles (toMail, toDatabase...). La méthode via reçoit en paramètre une instance de classe qui doit recevoir la notification, un utilisateur par exemple et retourne le canal sélectionné sous forme de tableau. Les canaux suivants sont possibles : mail, nexmo, database, broadcast ou slack.

Pour l'envoi de la notification, il y a deux solutions :


use App\Notifications\JobCompleted;
$user->notify(new JobCompleted($job));
  • l'utilisation de la façade "Notification" pour envoyer une notification à de multiples instances.

Notification::send($users, new JobCompleted($job));

Il est évidemment possible de compléter les attributs d'un message en fonction du canal choisi.

Laravel Scout

Laravel offre la possibilité d'effectuer des recherches fulltext sur l'ensemble de vos modèles Eloquent. Les index de recherches sont mis à jour automatiquement depuis les données de vos modèles.
Scout est livré avec le driver Algolia. Son utilisation est payante mais il est heureusement possible d'implémenter sa propre implémentation !
Il est nécessaire de faire appel au trait Searchable pour effectuer des recherches sur votre modèle.

Voici un exemple de la documentation :


<?php

namespace App;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;
}

Laraval Mailable

Laravel Mailable est une méthode d'envoi de mails plus efficace mais surtout plus simple.
Au lieu d'utiliser des Closures, on peut utiliser ceci :


$ php artisan make:mail MailWelcome

MailWelcome est une classe "Mailable". On indique la configuration (from, subject, view...) dans la méthode build.

Et pour l'envoi :

 


Mail::to($email)->send(new MailWelcome);

Il est également possible de faire appel à Illuminate\Bus\Queueable depuis "use Queueable" pour placer les messages à envoyer dans des files d'attente.

Laravel Passport

Il est possible d'implémenter un serveur d'authentification basé sur le protocole OAuth dans sa version 2, OAuth2.
Passport, c'est son nom, est bâti sur les fondations du serveur d'authentification League écrit en PHP (https://github.com/thephpleague/oauth2-server). Il est donc facile de créer des jetons d'authentification permettant à des applications clientes d'interragir de manière sécurisée avec un serveur distant. Finalement, c'est toute la gestion de ces jetons qui est également apportée.

Laravel Echo

C'est un paquet javascript installable depuis NPM qui propose une API pour s'inscrire à des canaux de votre serveur et recevoir des événements broadcastés depuis un client javascript.
Echo supporte Pusher et Socket.io

Faciliter le stockage de fichiers chargés

Une nouvelle méthode, store, peut être appelée pour stocker tout type de document.
On récupère l'objet édité depuis un formulaire frontend, dans la méthode update du contrôleur et on fait appel à store de la manière suivante :


$path = $request->file('avatar')->store('avatars', 's3');

return $path;

Migrations

Il est désormais possible de revenir en arrière, migration par migration au moyen du paramètre step.


$ php artisan migrate:rollback --step=1

Pagination simple améliorée

Laravel offre une pagination simple (liens précédent et suivant) et une pagination plus avancée avec le numéro de chaque page.
L'apparence de la pagination simple est désormais éditable grâce à un template spécifique que l'on peut surcharger.

Blade Loop Variable

Le moteur de templating Blade reçoit une nouvelle variable qui peut être utilisée dans les propriétés suivantes :

  • index – indique le nombre de boucles
  • remaining – indique le nombre restant de boucles
  • count – nombre total d'enregistrements
  • first – booléen pour indiquer s'il s'agit de la première boucle
  • last – booléen pour indiquer s'il s'agit de la dernière boucle
  • depth – niveau de profondeur actuel
  • parent – Permet d'appeler le parent dans une boucle imbriquée

Query Builder

Le query builder de Laravel retourne désormais une collection par défaut, plutôt qu'un tableau.

Cache Helper

Il y a un nouveau cache dispose de trois fonctions pour manipuler les données en cache : get, put ou bien retourner une instance du CacheManager.