Maison >cadre php >Laravel >Résumez les nouveaux ajouts, correctifs et modifications dans la version Laravel 9.5 !

Résumez les nouveaux ajouts, correctifs et modifications dans la version Laravel 9.5 !

WBOY
WBOYavant
2022-03-21 09:57:162596parcourir

Cet article vous apporte des connaissances pertinentes sur laravel L'équipe Laravel a publié la version 9.5, qui inclut la falsification de file d'attente partielle, la fonction auxiliaire freezeTime(), l'assertion storage assertDirectoryEmpty(), etc.

Résumez les nouveaux ajouts, correctifs et modifications dans la version Laravel 9.5 !

【Recommandation associée : vidéo laravel

L'équipe Laravel a publié la version 9.5, qui inclut la falsification de file d'attente partielle, la fonction d'assistance freezeTime (), l'assertion de stockage assertDirectoryEmpty (), la fermeture dans assertJsonPath (), etc. :

Prise en charge du rappel pour la méthode Implode de la collection

@Lito a contribué au support du rappel sur Collect::implode() pour simplifier les appels ->map()->implode() :

// 之前<br/>{{ $user->cities->map(fn ($city) => $city->name.&#39; (&#39;.$city->state->name.&#39;)&#39;)->implode(&#39;, &#39;) }}<br/>// 使用回调 <br/>{{ $user->cities->implode(fn ($city) => $city->name.&#39; (&#39;.$city->state->name.&#39;)&#39;, &#39;, &#39;) }}<br/>

Utiliser de fausses assertions de stockage Un répertoire vide

Marquer Beech a contribué à la possibilité d'affirmer un répertoire vide à l'aide d'une instance Storage::fake() :

// 9.5 版本之前<br/>$this->assertEmpty(Storage::disk(&#39;temp&#39;)->allFiles(&#39;/foo&#39;));<br/>// +9.5<br/>Storage::disk(&#39;temp&#39;)->assertDirectoryEmpty(&#39;/foo&#39;);<br/>

S'il n'y a aucun fichier dans le répertoire, seulement d'autres sous-répertoires, l'assertion échouera car elle contient d'autres dossiers/fichiers. Voici un exemple tiré de la discussion sur la pull request :

Storage::fake(&#39;temp&#39;);<br/>Storage::disk(&#39;temp&#39;)->put(&#39;/foo/bar.txt&#39;, &#39;string&#39;);<br/>Storage::disk(&#39;temp&#39;)->assertDirectoryEmpty(&#39;/&#39;); // 失败<br/>

L'assertion JSON "assertJsonPath()" accepte désormais les fermetures

Fabien Villepinte a contribué à la possibilité de transmettre des fermetures à assertJsonPath sans aucune rupture rétrocompatible :

$response = TestResponse::fromBaseResponse(new Response([<br/>    &#39;data&#39; => [&#39;foo&#39; => &#39;bar&#39;],<br/>]));<br/>$response->assertJsonPath(&#39;data.foo&#39;, &#39;bar&#39;);<br/>$response->assertJsonPath(&#39;data.foo&#39;, fn ($value) => $value === &#39;bar&#39;);<br/>

Bien que l'exemple ci-dessus semble plus simple en utilisant la version chaîne, si vous avez besoin d'une logique plus complexe autour des assertions de chemin, vous pouvez désormais utiliser des fermetures.

Faking partiel de file d'attente

Taylor Otwell a contribué à la simulation partielle pour la file d'attente testée :

Queue::fake([JobsToFake::class, /* ... */]);<br/>

Nouvelle façon de créer un modèle "traversant"

Hafez Divandari a contribué sans avoir besoin de remplacer l'intégralité de la méthode hasOneThrough ou hasManyThrough pour en créer un nouveau Capacités du modèle « through » :

// Define a `newThroughInstance` method<br/>protected function newThroughInstance($resource)<br/>{<br/>    return (new \App\Models\ExampleEntity)->setTable($resource);<br/>}<br/>

Nouvelle fonction d'assistance à l'encapsulation de chaîne

Markus Hebenstreit a contribué à la fonction d'assistance à la chaîne wrap(). Voici un exemple d'utilisation tiré de la description de la demande d'extraction :

Str:wrap(&#39;value&#39;)->wrap(&#39;"&#39;);<br/>Str::of(&#39;value&#39;)->wrap(&#39;"&#39;);<br/>str(&#39;value&#39;)->wrap(&#39;"&#39;);<br/>// 输出: "value"<br/>Str:wrap(&#39;is&#39;, &#39;This &#39;, &#39; me!&#39;);<br/>Str::of(&#39;is&#39;)->wrap(&#39;This &#39;, &#39; me!&#39;);<br/>str(&#39;is&#39;)->wrap(&#39;This &#39;, &#39; me!&#39;);<br/>// 输出: This is me!<br/>

Fonction d'assistance Freeze Time pour les tests

@Italo a contribué à la fonction d'assistance freezeTime() - une méthode de test qui figera l'heure actuelle dans le test :

public function test_something()<br/>{<br/>    $this->freezeTime();<br/>    // 或将时间设置为日期的当前秒<br/>    // 没有亚秒级精度。<br/>    $this->freezeSecond();<br/>}<br/>

Le freezeTime( ) est un sucre syntaxique pour :

$this->travelTo(Carbon::now());<br/>

Permet d'accepter des objets appelables dans la méthode Http::beforeSending ()

Dries Vints aide à accepter des objets appelables dans la méthode Http::beforeSending() au lieu de seulement des classes appelables uniquement. Désormais, l'exemple suivant fonctionnera au lieu d'obtenir « appeler la fonction membre __invoke() sur un tableau » :

Http::baseUrl(&#39;https://api.example.org&#39;)<br/>    ->beforeSending([ $this, &#39;prepareRequest&#39; ])<br/>    ->asJson()<br/>    ->withoutVerifying();<br/>

Notes de version

Vous pouvez consulter la liste complète des nouvelles fonctionnalités et mises à jour ci-dessous et consulter la version 9.4.0 sur GitHub Différences entre 9.5.0 et 9.5.0. Les notes de version suivantes sont tirées directement du journal des modifications :

Version 9.5.0

Nouveau

  • ajoute la prise en charge du rappel pour la méthode de collecte d'implosion. (#41405)

  • Ajout d'Illuminate/Filesystem/FilesystemAdapter::assertDirectoryEmpty(). (#41398)

  • Implémentez les "métadonnées" de courrier électronique pour SesTransport. (#41422)

  • Faites en sorte que assertPath () accepte une fermeture. (#41409)

  • Ajout du support appelable pour OperatorForWhere sur les collections. (#41414, #41424)

  • Ajout d'une falsification de file d'attente partielle. (#41425)

  • Ajout de l'option –name à la commande planning:test. (#41439)

  • définit Illuminate/Database/Eloquent/Concerns/HasRelationships::newRelatedThroughInstance(). (#41444)

  • Ajout d'Illuminate/Support/Stringable::wrap() (#41455)

  • Ajout de la fonction d'assistance « freezeTime » pour les tests. (#41460)

  • Autorise l'utilisation des appels beforeSending dans Illuminate/Http/Client/PendingRequest.php::runBeforeSendingCallbacks(). (#41489)

FIX

  • Correction d'un avertissement de dépréciation de route:list lors du filtrage sur le nom ou le domaine. (#41421)

  • Correction de la réponse HTTP::pool lorsque l'URL renvoie un code d'état vide. (#41412)

  • Résolution du nom du rappel fixe dans Illuminate/Session/Middleware/AuthenticateSession.php. (#41429)

  • Fixe de l'instance de garde utilisée dans /Illuminate/Session/Middleware/AuthenticateSession.php (#41447)

  • Fixe route:list –sauf-vendor, en utilisant Modifié dans la route cachée ::view () & Route::redirect () (#41465)

  • Ajoutez un type vide pour les propriétés de connexion dans IlluminateDatabaseEloquentFactoriesFactory . (#41418)

  • Noms réservés mis à jour dans GeneratorCommand (#41441)

  • Planification artisanale php repensée : commande list. (#41445)

  • Propriétés proxy d'ordre élevé éloquentes étendues. (#41449)

  • Autoriser la transmission de paramètres nommés à des étendues locales dynamiques. (#41478)

  • Exception levée si la balise réussit mais n'est pas prise en charge dans Illuminate/Encryption/Encrypter.php . (#41479)

  • La mise à jour PackageManifest::$vendorPath est initialisée pour le cas où le dossier du fournisseur du compositeur n'est pas dans le dossier du projet. (#41463)

【Recommandation associée : tutoriel vidéo laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer