Catégories
Laravel

Laravel 8.59

Laravel 8.59 est sortie le 07 septembre 2021 et voici ce que contenait cette nouvelle version de Laravel.

Laravel 8.59 : que nous réserve cette version ?

Comme chaque semaine, l’équipe Laravel et les nombreux contributeurs du projet, nous propose de nouvelles fonctionnalités pour le framework préféré des développeurs PHP.

Voyons cela plus en détail !

Création de modèles en silence (chuuuut !)

Grâce à cet ajout, il est désormais possible de créer des modèles sans qu’ils initient les events associés au modèles (savingsavedupdating, et updated).

Vous pouvez retrouver les détails du code directement dans le repository.

Voici ci-dessous une des trois méthodes ajoutées :

    /**
     * Create a collection of models and persist them to the database.
     *
     * @param  iterable  $records
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function createManyQuietly(iterable $records)
    {
        return Model::withoutEvents(function () use ($records) {
            return $this->createMany($records);
        });
    }

Merge() pour ajouter des valeurs par défaut dans les données validées

On voit dans l’exemple ci-dessous qu’il est possible de passer une valeur directement validée via la nouvelle fonction merge().

$validator = Validator::make(['name' => 'Taylor'], ['name' => 'required']);

$validator->safe()->merge(['role' => 'Admin']);

User::create($validator->safe()->all());

Comme le dit Taylor Otwell dans la pull request proposée par Mohamed Haj :

I honestly don’t mind this that much… sometimes you may need to throw a few default values into the validated data if you are going to pass it straight to a model creation method.

Taylor Otwell

Il arrive parfois d’avoir besoin d’ajouter quelques valeurs par défaut dans les données validées si vous voulez les transmettre directement à une méthode de création de modèle.

Interdire le morphing de classe

Ajout d’une fonction qui permet d’interdire les morphs sans morph map :

Relation::enforceMorphMap([
    'user' => User::class,
]);

Si un modèle n’a pas de map de morphing enregistrée, Laravel lèvera une exception ClassMorphViolationException.

Ajout d’une méthode each() sur AssertableJson

Il s’agit d’une nouvelle méthode qui permet d’effectuer un test sur chaque élément de l’AssertableJson.

Voici un exemple d’utilisation :

public function testEachScope()
    {
        $assert = AssertableJson::fromArray([
            'foo' => [
                'key' => 'first',
            ],
            'bar' => [
                'key' => 'second',
            ],
        ]);

        $assert->each(function (AssertableJson $item) {
            $item->whereType('key', 'string');
        });
    }

Ajout des méthodes whereMorphedTo et orWhereMorphedTo au builder d’Eloquent

Ces méthodes permettent de rendre le code plus consis et plus lisible.

Par exemple, il va permettre de remplacer :

$feedback = Feedback::query()
    ->where('subject_type', $model->getMorphClass())
    ->where('subject_id', $model->getKey())
    ->get();

par

$feedback = Feedback::whereMorphedTo('subject', $model)->get();

C’est vraiment beaucoup plus clair ainsi.

Pour en savoir plus sur cette fonctionnalité, vous pouvez lire l’explication détaillée du développeur dans la pull request.

C’est tout pour les ajouts. Il y a eu une correction de bug et quelques modifications dans le code existant.
Je vous laisse en prendre connaissance dans la note de version de Laravel 8.59 ci-dessous.

Laravel 8.59 en détail

Si vous voulez regardez de plus prêt le contenu de cette nouvelle version sur Github, voici le contenu officiel de la note de version de Laravel 8.59 :

Added

  • Allow quiet creation (e9cd94c)
  • Added merge() function to ValidatedInput (#38640)
  • Added support for disallowing class morphs (#38656)
  • Added AssertableJson::each() method (#38684)
  • Added Eloquent builder whereMorphedTo method to streamline finding models morphed to another model (#38668)

Fixed

  • Silence Validator Date Parse Warnings (#38652)

Changed

  • Remove mapWithKeys from HTTP Client headers() methods (#38643)
  • Return a new or existing guzzle client based on context in Illuminate/Http/Client/PendingRequest::buildClient() (#38642)
  • Show a pretty diff for assertExactJson() (#38655)
  • Lowercase cipher name in the Encrypter supported method (#38693)

A la semaine prochaine pour la prochaine version de Laravel 8.

PS : hey les dev, vous pouvez aussi consulter mes autres articles concernant les releases de Laravel !

Abonnement unique O2Switch à 5€/mois

Par HappyToDev

Absolument passionné depuis toujours par l'informatique et la programmation, je souhaite via ce blog vous faire passer un peu du savoir que j'ai accumulé depuis des années.
Et même, pourquoi pas, vous aider à faire le premier pas dans le développement web.

Vous êtes prêts ?
Alors allons y ensemble et n'oubliez pas que les débutants sont vraiment les bienvenus.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.