Notes de version
- Algorithme de hachage de jeton Token Guard
- Validateur d'e-mail amélioré
- Fuseau horaire de la tâche planifiée par défaut
- Table du milieu/événements de modèle pivot
- Aide au test Mock/Spy méthodes
- Persistance des clés de ressources éloquentes
- Ordre supérieur ou où Méthodes éloquentes
- Amélioration Artis an Serve
- Mappage de fichiers modèles
- Pilote de cache/session DynamoDB
- Support Carbone 2.0
- Support Pheanstalk 4.0
Notes de version
- Schéma de contrôle de version
- Stratégie de support
- Laravel 5.8
Schéma de contrôle de version
Le schéma de contrôle de version de Laravel utilise la convention suivante :
Numéro de version majeure.Numéro de version mineur.Numéro de révision
. Le framework de versions mineures est publié tous les six mois (février et août), tandis que les versions de révision, qui contiennent des modifications importantes, peuvent être publiées chaque semaine.主版本号.次版本号.修订号
。次版本号框架每六个月(二月和八月)发布,而修订号版本可能每周发布一次,修订号版本 不 包含重大更改。当你从应用程序中或者在包中引用 Laravel 框架或者其他组件时,应该始终使用版本约束,例如
Lorsque vous référencez le framework Laravel ou d'autres composants de votre application ou dans un package, vous devez toujours utiliser des contraintes de version, telles que5.7.*
5.7.*
, car les versions mineures de Laravel contiennent des modifications importantes. Cependant, nous travaillerons dur pour garantir que vous puissiez mettre à jour en un jour ou moins. Les versions entre les versions majeures prennent souvent de nombreuses années, et chaque version représente un changement fondamental dans l'architecture du framework et la structure sous-jacente. Il n'est actuellement pas prévu de développer un numéro de version majeur. Politique de supportPour les versions LTS, telles que 5.5, deux ans de corrections de bogues et trois ans de correctifs de sécurité sont fournis. Ces versions offrent le support et la maintenance les plus longs. Pour la version générale, seuls six mois de corrections de bugs et un an de correctifs de sécurité sont fournis.Version Heure de sortie Date limite de correction de bug Date limite de correction de sécurité 5.0 4 février 2015 20 août 15 9 juin 2015 © 9 juin 2017 © 9 juin 2018 © 5.2 21 décembre 2015 21 juin 2016 21 décembre 2016 5.3 23 août 2016 5.4 24 janvier 2017 24 juillet 2017 24 janvier 2018 5.5 30 août 2017 30 août 2019 30 août 2020 5.6 7 février 2018 7 août 2018 4 septembre 20197 février 2019 5.7 4 septembre 2018 201 9 9 ans 4 mars 26 février 20205.8 26 février 2019 26 août 2019 Laravel 5.8
Laravel 5.8 continue d'être optimisé sur la base de Laravel 5.7, y compris l'introduction de nouvelles relations Eloquent (has-one-through), une vérification optimisée des e-mails, l'enregistrement automatique des classes de politique d'autorisation basées sur des conventions, la mise en cache DynamoDB et Pilote de session, optimisation de la configuration du fuseau horaire du planificateur de tâches, prise en charge de l'attribution de plusieurs gardes d'authentification aux canaux de diffusion, spécification du pilote de cache PSR-16, optimisation de la commande
artisan serve
, prise en charge de PHPUnit 8.0, prise en charge de Carbon 2.0, prend en charge Pheanstalk 4.0, ainsi que plusieurs corrections de bugs et améliorations de la convivialité.artisan serve
命令、支持 PHPUnit 8.0、支持 Carbon 2.0 、支持 Pheanstalk 4.0 ,以及多个 bug 修复和可用性的提升。Eloquent
HasOneThrough
关联关系Eloquent 现在提供了对
hasOneThrough
关联类型的支持。例如,假设 Supplier 模型类与 Account 模型类之间是一对一关联,并且 Account 模型类与 AccountHistory 模型类之间也是一对一关联,那么 Supplier 模型类与 AccountHistory 模型类之间可以通过hasOneThrough
方法基于 Account 模型类建立远层的一对一关联。你可以用hasOneThrough
关联关系通过 Account 模型类访问 AccountHistory 模型类:/** * Get the account history for the supplier. */ public function accountHistory() { return $this->hasOneThrough(AccountHistory::class, Account::class); }
自动寻找模型策略
当使用 Laravel 5.7 时,每个模型对应的 认证策略 都需要被显式地注册到应用的
AuthServiceProvider
中:/** * 当前应用的策略对应关系 * * @var array */ protected $policies = [ 'App\User' => 'App\Policies\UserPolicy', ];
Laravel 5.8 引进了模型策略的自动寻找,只要模型和策略的命名符合 Laravel 的标准约定。即策略必须在
Policies
路径下,该路径之上包含模型。举个例子,模型可能放在app
路径下,则策略可以在放app/Policies
路径下。另外,策略名称必须匹配模型名称并且加上Policy
后缀。这样,User
模型将会对应上UserPolicy
类。如果你想要提供自己的策略寻找逻辑,你可以使用
Gate::guessPolicyNamesUsing
方法来注册一个自定义的回调函数。通常来说,这个方法应该从你应用的AuthServiceProvider
中被调用:use Illuminate\Support\Facades\Gate; Gate::guessPolicyNamesUsing(function ($modelClass) { // return policy class name... });
{note} 任何被显式地映射到
AuthServiceProvider
中的策略都将优先于隐式自动寻找策略。PSR-16 缓存规范
为了在存储缓存项时允许更细粒度的过期时间并遵守 PSR-16 缓存标准,我们将缓存项的有效期单位从分钟调整到秒。
IlluminateCacheRepository
及其扩展类的put
、putMany
、add
、remember
和setDefaultCacheTime
方法以及每个缓存存储实现类的put
Associations
Eloquent prend désormais en charge le type d'associationHasOneThrough
EloquenthasOneThrough
. Par exemple, en supposant qu'il existe une relation un-à-un entre la classe de modèle Supplier et la classe de modèle Account, et qu'il existe également une relation un-à-un entre la classe de modèle Account et la classe de modèle AccountHistory, alors le fournisseur La classe modèle et la classe modèle AccountHistory peuvent être connectées viahasOneThrough
. La méthode établit une association un-à-un au niveau distant basée sur la classe modèle Account. Vous pouvez utiliser l'associationhasOneThrough
pour accéder à la classe de modèle AccountHistory via la classe de modèle Account : 🎜// Laravel 5.7 - 缓存30分钟... Cache::put('foo', 'bar', 30); // Laravel 5.8 - 缓存30秒... Cache::put('foo', 'bar', 30); // Laravel 5.7 / 5.8 - 缓存30秒... Cache::put('foo', 'bar', now()->addSeconds(30));
Trouver automatiquement les stratégies de modèle
🎜Lors de l'utilisation de Laravel 5.7, la stratégie d'authentification correspondant à chaque Le modèle doit être explicitement enregistré dans leAuthServiceProvider
de l'application : 🎜Broadcast::channel('channel', function() { // ... }, ['guards' => ['web', 'admin']])
🎜Laravel 5.8 introduit la recherche automatique des stratégies de modèle, tant que le nom du modèle et de la stratégie est conforme aux conventions standard de Laravel. Autrement dit, la stratégie doit se trouver sous le cheminPolicies
, qui contient le modèle. Par exemple, le modèle peut être placé sous le cheminapp
et la stratégie peut être placée sous le cheminapp/Policies
. De plus, le nom de la stratégie doit correspondre au nom du modèle et être suffixé parPolicy
. De cette façon, le modèleUser
correspondra à la classeUserPolicy
. 🎜🎜Si vous souhaitez fournir votre propre logique de recherche de politique, vous pouvez utiliser la méthodeGate::guessPolicyNamesUsing
pour enregistrer une fonction de rappel personnalisée. De manière générale, cette méthode doit être appelée à partir duAuthServiceProvider
de votre application : 🎜$schedule->command('inspire') ->hourly() ->timezone('America/Chicago');
🎜{note} Toute stratégie explicitement mappée à
AuthServiceProvider
aura priorité sur l'implicite. stratégie de recherche automatique. 🎜Spécification de mise en cache PSR-16
🎜Pour permettre des délais d'expiration plus précis lors du stockage des éléments de cache et se conformer à la norme de mise en cache PSR-16, nous avons ajusté l'unité d'expiration des éléments de cache de minutes en seconde.IlluminateCacheRepository
et ses classes d'extensionput
,putMany
,add
,remember
et < Les unités de période de validité correspondant à la méthode code>setDefaultCacheTime et à la méthodeput
de chaque classe d'implémentation de stockage en cache ont été ajustées de cette manière. Vous pouvez consulter le PR associé pour plus de détails. 🎜Si la méthode ci-dessus est appelée dans votre code, le code correspondant doit être mis à jour pour garantir que la durée de validité écoulée est cohérente avec la précédente (l'unité devient des secondes au lieu des minutes précédentes). transmettez également une instance
DateTime
pour identifier l'heure d'expiration des éléments mis en cache :DateTime
实例来标识缓存项的过期时间:/** * 获取默认定时任务时区。 * * @return \DateTimeZone|string|null */ protected function scheduleTimezone() { return 'America/Chicago'; }
多个广播认证看守器
在 Laravel 之前发行的版本中,私有和到场广播频道通过应用的默认认证 guard 对用户进行认证。从 Laravel 5.8 开始,你可以分配多个 guard 来对请求进行认证:
use Illuminate\Support\Facades\Artisan; Artisan::call('migrate:install', ['database' => 'foo']);
Token Guard 令牌哈希算法
Laravel 中提供基本 API 认证的
token
guard,现在支持以 SHA-256 哈希算法对 API 令牌进行存储。这比存储纯文本令牌更加安全。要了解更多有关哈希令牌的细节,请查阅完整的 API 认证文档。注: 即便 Laravel 提供了一个关简单的、基于令牌的认证 guard ,考虑到健壮性和提供了 API 认证的线上应用,我们强烈推荐你使用 Laravel Passport 。
改进 Email 验证器
Laravel 5.8 采用了 SwiftMailer 的
egulias/email-validator
包,改进了 email 验证器的验证逻辑。之前的 Laravel Email 验证逻辑认为有效的邮件地址,比如example@bär.se
,现在可能会被判定无效。默认定时任务时区
Laravel 允许用户使用
timezone
方法来自定义定时任务的时区:Artisan::call('migrate:install --database=foo');
如果你为每个定时任务都定义一个时区的话,这样会比较繁琐与麻烦。更简便的方法是在
app/Console/Kernel.php
文件内定义一个schedule Timezone
方法。这个方法将会把默认时区返回给所有的定时任务:// Laravel 5.7 $this->instance(Service::class, Mockery::mock(Service::class, function ($mock) { $mock->shouldReceive('process')->once(); })); // Laravel 5.8 $this->mock(Service::class, function ($mock) { $mock->shouldReceive('process')->once(); });
中间表 /pivot 模型事件
在之前版本的 Laravel 中,当附着,分离或同自定义中间表 / 多对多关系的 “pivot” 模型时 Eloquent 模型事件不会被派遣。在现在的 Laravel 5.8 中,使用 定制中间表模型 时,这些事件都将被派遣。
Artisan 调用改进
Laravel 允许你通过
Artisan::call
方法来调用 Artisan 。在之前发布的 Laravel 中,命令的选项是通过一个数组作为第二个参数来传递到方法中的:use App\User; use App\Http\Resources\User as UserResource; Route::get('/user', function () { return UserResource::collection(User::all()); });
然而,Laravel 5.8 允许你传递完整的命令,包括其选项。它将作为第一个字符串参数到方法中:
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class User extends JsonResource { /** * Indicates if the resource's collection keys should be preserved. * * @var bool */ public $preserveKeys = true; }
Mock / Spy 测试辅助方法
为了创建模拟对象更加方便, 新的
mock
和spy
use App\User; use App\Http\Resources\User as UserResource; Route::get('/user', function () { return UserResource::collection(User::all()->keyBy->id); });
Multiple Broadcast Authentication GuardsDans les versions précédentes de Laravel, les chaînes de diffusion privées et en direct étaient authentifiées auprès des utilisateurs via l'authentification par défaut de l'application. garde. À partir de Laravel 5.8, vous pouvez attribuer plusieurs gardes pour authentifier les requêtes :// scopePopular 和 scopeActive 方法定义在 User 模型中... $users = App\User::popular()->orWhere(function (Builder $query) { $query->active(); })->get();
Algorithme de hachage du jeton Token Guard 🎜🎜Le gardetoken
qui fournit une authentification API de base dans Laravel prend désormais en charge l'algorithme de hachage SHA -256 pour le stockage Jetons API. C'est plus sécurisé que de stocker des jetons en texte brut. Pour en savoir plus sur les jetons de hachage, consultez la documentation complète sur l'authentification API. 🎜🎜Remarque : Même si Laravel fournit une protection d'authentification simple basée sur des jetons, compte tenu de la robustesse et de l'authentification API pour les applications en ligne, nous vous recommandons fortement d'utiliser Laravel Passport. 🎜
🎜Validateur d'e-mail amélioré🎜🎜Laravel 5.8 utilise le packageegulias/email-validator
de SwiftMailer pour améliorer la logique de vérification du validateur d'e-mail. Les adresses e-mail qui étaient auparavant considérées comme valides par la logique de validation des e-mails de Laravel, telles queexample@bär.se
, peuvent désormais être considérées comme invalides. 🎜🎜Fuseau horaire des tâches planifiées par défaut🎜🎜Laravel permet aux utilisateurs d'utiliser la méthodetimezone
pour personnaliser le fuseau horaire des tâches planifiées : 🎜$users = App\User::popular()->orWhere->active()->get();
🎜Si vous définissez un fuseau horaire pour chaque tâche planifiée, ce sera plus encombrant et gênant. Un moyen plus simple consiste à définir une méthodeschedule Timezone
dans le fichierapp/Console/Kernel.php
. Cette méthode renverra le fuseau horaire par défaut à toutes les tâches planifiées : 🎜rrreee🎜Événement de modèle de table/pivot intermédiaire🎜🎜Dans les versions précédentes de Laravel, lors de l'attachement, du détachement ou du "pivot" avec une table intermédiaire personnalisée/une relation plusieurs-à-plusieurs ” modèle Les événements de modèle éloquents ne sont pas distribués. Dans Laravel 5.8 désormais, lors de l'utilisation du modèle de table intermédiaire personnalisé, ces événements seront distribués. 🎜🎜Améliorations des appels Artisan🎜🎜Laravel vous permet d'appeler Artisan via la méthodeArtisan::call
. Dans les versions précédentes de Laravel, les options d'une commande étaient transmises aux méthodes via un tableau comme deuxième paramètre : 🎜rrreee🎜 Cependant, Laravel 5.8 vous permet de transmettre la commande complète, y compris ses options. Il sera transmis comme premier paramètre de chaîne à la méthode : 🎜rrreee🎜Méthode d'aide au test Mock/Spy🎜🎜Pour créer des objets fictifs plus facilement, nouvelles méthodesmock
etspy
a été ajouté au cas de test de base de Laravel. Ces méthodes lient automatiquement la classe fictive au conteneur. Par exemple : 🎜rrreee🎜Les clés de ressources éloquentes persistent 🎜🎜Lorsqu'une collection de ressources éloquentes est renvoyée depuis un itinéraire, Laravel réinitialise les clés de la collection afin qu'elles soient dans un ordre numérique simple : 🎜rrreeeLorsque vous utilisez Laravel 5.8, vous pouvez ajouter un attribut
rrreeepreserveKeys
à une classe de ressources pour indiquer si les clés de la classe de ressources sont préservées. Par défaut, pour être cohérent avec les versions précédentes de Laravel, ces clés sont réinitialisées :preserveKeys
属性到资源类表明资源类的键是否保留。默认情况下,为了和之前版本的 Laravel 保持一致,这些键会被重置:当
rrreeepreserveKeys
的属性值设置为true
时, 集合键会被保留:高阶
orWhere
Eloquent 方法在之前发布的 Laravel 中,通过
rrreeeor
query 操作符来合并多个 Eloquent 模型作用域须使用闭包回调:Lavavel 5.8 引进了 「高阶」
rrreeeorWhere
方法,使你可以不用闭包,从而实现对作用域的流畅链式调用。Artisan Serve 改进
在之前发布的 Laravel 中,Artisan 的
serve
方法会启动你的应用服务,监听8000
端口。 如果一个serve
命令进程已经启动并占用了这个端口,那么通过serve
命令尝试启动第二个应用服务将会失败。从 Laravel 5.8 起,serve
会扫描可用的端口直到8009
,让你可以同时启动多个应用服务。模板文件映射
当编译 Blade 模板时,Laravel 现在会在编译文件的顶部添加注释,其中包含原始 Blade 模板路径。
DynamoDB 缓存 / Session 驱动
Laravel 5.8 引入了 DynamoDB 缓存和 session 驱动。DynamoDB 是 Amazon Web Services 提供的无服务器 NoSQL 数据库。默认的
dynamodb
缓存驱动配置可以在 Laravel 5.8 的 缓存配置文件 中找到。Carbon 2.0 支持
Laravel 5.8 提供对 Carbon 日期处理库
~2.0
发行版本的支持。Pheanstalk 4.0 支持
Laravel 5.8 提供对 Pheanstalk 队列库
Lorsque la valeur de la propriété~4.0
发行版本的支持。如果你的应用正在使用 Pheanstalk 库,请通过 Composer 升级该库到~4.0
rrreeepreserveKeys
est définie surtrue
, la clé de collection sera réservée :rrreeeLavavel 5.8 introduit la méthodeMéthodes éloquentes
Dans Laravel précédemment publié, plusieurs modèles éloquents peuvent être fusionnés via l'opérateur de requêteorWhere
d'ordre supérieurou
que les scopes doivent utiliser rappels de fermeture : rrreeeorWhere
"de haut niveau", qui vous permet d'éliminer le besoin de fermetures et d'obtenir des appels enchaînés en douceur vers la portée. rrreeeAméliorations d'Artisan Serve
🎜Dans Laravel précédemment publié, la méthodeserve
d'Artisan démarrera votre service d'application et écoutera le port8000
. Si un processus de commandeserve
est déjà démarré et occupe ce port, les tentatives de démarrage du deuxième service d'application via la commandeserve
échoueront. À partir de Laravel 5.8,serve
analysera les ports disponibles jusqu'à8009
, vous permettant de démarrer plusieurs services d'application en même temps. 🎜Mappage des fichiers modèles
🎜Lors de la compilation d'un modèle Blade, Laravel ajoute désormais un commentaire en haut du fichier compilé contenant le chemin du modèle Blade d'origine. 🎜Pilote de cache/session DynamoDB
🎜Laravel 5.8 introduit le cache DynamoDB et le pilote de session. DynamoDB est une base de données NoSQL sans serveur fournie par Amazon Web Services. La configuration par défaut du pilote de cachedynamodb
se trouve dans le fichier de configuration du cache Laravel 5.8. 🎜Support Carbon 2.0
🎜Laravel 5.8 prend en charge la version~2.0
de la bibliothèque de traitement des dates Carbon. 🎜Prise en charge de Pheanstalk 4.0
🎜Laravel 5.8 fournit la prise en charge de la version~4.0
de la bibliothèque de files d'attente Pheanstalk. Si votre application utilise la bibliothèque Pheanstalk, veuillez mettre à niveau la bibliothèque vers la version~4.0
via Composer. 🎜🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜
- Améliorations des appels artisanaux