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 (saving
, saved
, updating
, 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 !