Quoi de neuf dans Laravel 8 ?
Tags: php, laravel
Published: 2021-04-19 12:22:46

Le 8 septembre 2020, la version 8 de Laravel est sortie, qui dispose de nouvelles fonctionnalités telles que le répertoire des modèles, l'ecrasement des migrations (Squashing), les jobs batch, des améliorations en mode maintenance, des composants dynamiques dans les templates Blade, améliorations des écouteurs d'événements, etc.

| Version | Release | Bug Fixes Until | Security Fixes Until |
| --- | --- | --- | --- |
| 6 (LTS) | September 3rd, 2019 | September 7th, 2021 | September 6th, 2022 |
| 7 | March 3rd, 2020 | October 6th, 2020 | March 3rd, 2021 |
| 8 | September 8th, 2020 | March 1st, 2022 | September 6th, 2022 |
| 9 (LTS) | September, 2021 | September, 2023 | September, 2024 |
| 10 | September, 2022 | March, 2024 | September, 2024 |
<figcaption>Laravel Releases Calendar</figcaption>

Dans cet article, je vais vous parler de tous les détails de certaines de ces nouvelles fonctionnalités.

**1. Laravel Jetstream**

Il s’agit d’un package de scaffolding qui vous permet de créer rapidement les fonctionnalités de connexion, d’enregistrement, de vérification d’e-mail, d’authentification à 2 étapes, de gérer les sessions, le support API via [Laravel Sactum](https://laravel.com/docs/8.x/sanctum) et éventuellement la gestion des équipes.

`Laravel Jetstream` remplace et améliore le package de scaffolding que Laravel avait dans les versions précédentes avec l’interface utilisateur, qui a été créée avec [**Tailwind CSS**](https://tailwindcss.com/).

`Laravel Jetstream` est venue avec deux choix de stacks frontend [Livewire + Blade](https://laravel-livewire.com/) ou  [Inertia.js + Vue.js](https://inertiajs.com/)

#### **Comment utiliser laravel Jetstream?**

Vous pouvez créer une nouvelle application avec Jetstream à l’aide du programme d’installation de Laravel. Assurez-vous que le programme d’installation de Laravel est mis à jour vers la v4.0, puis exécutez ce qui suit:

    laravel new my-project -jet

Choisissez le stack que vous souhaitez utiliser: `Livewire` ou `Inertia`.

Ensuite, exécutez vos migrations de base de données avec:

    php artisan migrate

Finalement, consultez votre application sur `http://localhost:8000` en exécutant:

    php artisan serve

**2. Un répertoire pour les Models**

À la demande de la communauté, le squelette d’un projet Laravel comprend désormais un répertoire pour les modèles, toutes les commandes pertinentes ont été mises à jour pour supposer que les modèles existent dans le répertoire, s’il existe. Si le répertoire des modèles n’existe pas, Laravel supposera que les modèles sont placés directement dans le répertoire de l’application app.

![Nouveau repertoire Models](https://cdn-images-1.medium.com/max/2000/1*mx5O0armKV9kCKZGgJjFvA.png)<figcaption> Nouveau repertoire Models</figcaption>


**3. Les classes Model Factories**

Les **Model factories** ont été complètement réécrite comme des classes au lieu des fonctions, les model factories ont été améliorés pour soutenir les relations de premier-ordre (first-class relationship), par exemple *UserFactory* inclus dans Laravel est écrit comme suit :

{% gist https://gist.github.com/yalhyane/44df70fbe8090f4a24d04ff8b7ebc3f9 %}

Grâce à la nouvelle *fonctionnalité* HasFactory disponible dans les modèles générés, les model factories peuvent être utilisées de la manière suivante:

    User::factory()->count(20)->create();


**4. Migration écrasée**

Laravel 8 introduit une autre fonctionnalité intéressante: l’écrasement des migrations! Vous n’avez plus à manipuler beaucoup de fichiers de migration lorsque vous ouvrez votre dossier de migrations! Grâce à l’écrasement de la migration, vous pouvez désormais condenser vos fichiers de migration en un seul fichier SQL avec les commandes suivantes:

    # condensation de migration
    php artisan schema:dump

    # Vider le schéma de base de données actuel et élaguer toutes 
    # les migrations existantes
    php artisan schema:dump --prune

Après avoir exécuté la première commande ci-dessus, Laravel 8 crée un fichier de *schéma* dans le répertoire de ***database/schema*** et lorsque vous essayez de migrer votre base de données et qu’aucune autre migration n’a été exécutée, Laravel exécutera d’abord le SQL du fichier de *schéma*, ensuite il exécutera les migrations restantes qui ne faisaient pas partie de la condensation…

**5. Limitation de débit (Improved Rate Limiting)**

Laravel 8 apporte des améliorations à la fonctionnalité de limitation de débit (rate limiting) existante tout en prenant en charge la rétrocompatibilité avec le middleware Throttle et en offrant beaucoup plus de flexibilité.

Vous pouvez définir vos limiteurs de débit dans le fichier `app/Providers/RouteServiceProvider.php` comme suit:

{% gist https://gist.github.com/yalhyane/63180cc44d2d1c9095036f3d90bbf591 %}

Vous pouvez ensuite appliquer cette configuration prédéfini aux routes Laravel avec le Throttling Middleware

{% gist https://gist.github.com/yalhyane/f763d9b14eb0143fc46272ec62fcf87d %}

**6. Les mises à jour de Routing Namespace**

Dans les version précédentes de Laravel, la propriété `$namespace` de la classe RouteServiceProvider contenait la valeur `App\Http\Controllers`. Cette propriété s’ajoutait automatiquement en tant que préfixe namespace dans les définitions des contrôleurs dans les routes.

Laravel 7:

    Route::get('/users', 'UserController@index');

Dans ce cas Laravel 7  considérera que la classe UserController appartient au namespace défini par la propriété `$namespace` de RouteServiceProvider qui est par défaut: `App\Http\Controllers`.

Dans Laravel 8, cette propriété a la valeur par défaut de `null`, cela signifie que Laravel n’effectuera aucun préfixage automatique du namespace des contrôleurs. Par conséquent, dans les nouvelles applications Laravel 8, les définitions de namespace du contrôleur doivent être définies à l’aide de la syntaxe callable de PHP pour spécifier le namespace complet:

Laravel 8:

    use App\Http\Controllers\UserController;

    Route::get('/users', [UserController::class, 'index']);



**7. Des Helpers pour le Time Testing**

Lors des tests dans Laravel, vous deviez parfois modifier l’heure obtenue avec la méthode `now()` ou effectuer des tests dans le futur ou dans le passé. Laravel 8 inclut désormais des Helpers qui permettent à votre application de voyager dans le temps et de manipuler l’heure actuelle.

{% gist https://gist.github.com/yalhyane/d38199b73813c87fad1bddffbb7f3b50 %}

**8. Les améliorations du Mode Maintenance**

Dans les versions précédentes de Laravel, vous deviez spécifier les adresses IP qui sont autorisées à accéder à l’application quand elle est en mode maintenance avec la commande:

    php artisan down --allow=192.168.1.1

Laravel 8 apporte quelques améliorations à cette fonctionnalité, vous n’avez plus besoin d’autoriser seulement certaines adresses IP. Au lieu de ça, vous pouvez utiliser l’option secret de la commande php artisan down pour créer un access token pour l’application au mode maintenance:

    php artisan down --secret='Y7oXZapnys25F9qCdr18h3uKjsT8U9Ow'

**9. Distribution des Jobs par lots (Job batching)**

Laravel 8 est également livrée avec une fonctionnalité qui permet de distribuer un groupe de jobs à exécuter en parallèle.

Pour utiliser la nouvelle fonctionnalité, définissez d’abord un job comme vous le faisiez avant. L’exemple ci-dessous a été simplifié pour montrer l’utilisation du nouveau trait Batchable :

{% gist https://gist.github.com/yalhyane/b4c1329bdf039fd171b79a31536c66ee %}

Maintenant vous pouvez distribuer votre job en utilisant la méthode `batch` de la facade `Bus`. Et pour surveiller la progression des jobs, vous pouvez utiliser les méthodes `then`, `catch` et `finally` pour définir des callbacks de completion des jobs.

{% gist https://gist.github.com/yalhyane/75b2f457123d389737e5da95ab5bfa24 %}

**Conclusion**:

Dans cet article, nous avons cité les principales nouvelles fonctionnalités de Laravel 8, pour en savoir plus vous pouvez consulter le Release Notes sur la [documentation officielle de Laravel ](https://laravel.com/docs/8.x/releases), et je vous donne rendez-vous en Septembre pour vous parler de laravel 9.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sfmt1w5r6r60fvqmauco.png)