Les nouveautés de Laravel 5.3

Elliott Chiaradia | 13-06-2016

Bien que la date de la release de la version 5.3 ne soit pas encore fixée, elle devrait tout bientôt être disponible (fin juin, début juillet ?). Cette nouvelle version de Laravel apportera son lot de nouveautés, afin d'améliorer le framework PHP et de proposer aux développeurs des outils encore plus pratiques. Taylor Otwell, le créateur de Laravel, tease au compte-goutte via son compte twitter ces futures améliorations.

Cet article (non exhaustif) vous présentera succinctement quelques nouveautés proposées par cette nouvelle version de Laravel.

 

First Or Create

La méthode FirstOrCreate permet de vérifier s'il y a un enregistrement qui a l'attribut spécifié dans votre base de données, et si ce n'est pas le cas, il est créé. Dans l'exemple suivant, s'il n'y a pas de Flight qui a comme nom "Flight 10", alors un nouvel enregistrement d'un Flight sera créé en lui attribuant "Flight 10" comme nom.

$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);

 

Malheureusement, cette méthode ne pouvait prendre en charge qu'un seul attribut. Mais avec la version 5.3 de Laravel, il sera possible d'en passer plusieurs, comme ceci :

$flight = App\Flight::firstOrCreate(['id', '1'], ['name' => 'Flight 10']);

 

Capturer les itérations des boucles foreach dans Blade

Alors ça c'est une bonne nouvelle ! Fini le comptage manuel des itérations dans nos views ! Avec Laravel 5.3, dans les boucles foreach de Blade, nous pourrons utiliser l'objet "$loop". Grâce à lui, nous pourrons savoir très facilement si c'est la première ou la dernière itération.

@if($loop->first)
    Do something on the first iteration.
@endif

@if($loop->last)
    Do something on the last iteration.
@endif

 

Le Query Builder retournera une collection

Actuellement, quand on utilise le Query Builder (DB::table ...), un array nous est retourné.

$array = DB::table('posts')->get();

 

Ce qui est loin d'être pratique, car quand on passe directement par l'ORM Eloquent, les données nous sont retournées sous la forme de collection.

$collection = POST::all();

 

Si par exemple, nous voulons merger la collection avec l'array obtenu via le Query Builder, il nous faudrait bricoler. Et bien ça ne sera plus le cas puisque dorénavant le Query Builder nous retournera non plus un array, mais aussi une collection !

$collection = DB::table('posts')->get();

 

Rollbacker une seule et unique migration

Laravel 5.3 offrira une commande permettant d'annuler une seule migration au lieu du dernier lot de migrations.

php artisan migrate:rollback --step=1

 

Affichage des classes dans la Queue console

Depuis déjà quelques versions, Laravel propose un système de file d'attente (appelé "queue"). En utilisant la commande queue:work, la console nous affichait "CallQueuedHandle". Désormais, elle affichera les noms des classes réelles.

php artisan queue:work

 

Charger des migrations de plusieurs emplacements

Pour charger les migrations d'un service provider, habituellement on copie manuellement les fichiers de migrations dans le dossier database/migrations. Mais avec Laravel 5.3, on n'aura plus besoin de le faire, car on pourra directement charger les migrations d'un service provider en précisant son chemin.

$this->loadMigrationsFrom('path/to/migrations/folder')

 

Personnalisation de la pagination

Avec Laravel 5.2, créer une pagination était une chose aisée, mais pour sa customisation au niveau des vues il fallait pas mal bricoler. Ce ne sera plus le cas avec cette nouvelle version qui nous offre la possibilité de "travailler" avec l'objet "$paginator" dans nos vues. Dans le code ci-dessous, la fonction onFirstPage() est utilisée sur l'objet $paginator afin de savoir si on se trouve sur la page une et si c'est le cas, alors notre <li> permettant de nous rendre sur la première page n'est pas cliquable. Alors que si on se trouve sur une autre page, ce <li> sera muni d'un lien nous permettant de nous rendre à la page une.

<ul class="pagination">
  <!-- Previous Page Link -->
  @if ($paginator->onFirstPage())
    <li class="disabled"><span> « </span></li>
  @else
    <li>
      <a href="{{paginator->previousPageUrl()}}" rel="prev"> « </a>
    </li>
  @endif

 

Conclusion

Puisque la version release n'est pas encore disponible, les nouveautés présentées sont susceptibles de changer. Et comme vous l'aurez compris, ces améliorations listées ne sont qu'un petit échantillon de ce qui nous attend, car la version 5.3 de Laravel nous offrira encore bien plus de nouveautés, qu'on espère utiles et pratiques.

Source :