Laravel 9.2 发布

Laravel 团队发布了9.2.0 版本,增加了数组 keyBy 方法, Eloquent 属性静态构造方法, 将 Laravel CORS 包移入到 Laravel 框架中

Attribute::make 方法

@ARI 为 Eloquent Attribute 类贡献了一个静态构造方法, 它提供了如下的便利:

// 使用 new 关键词
return (new Attribute(
    get: fn ($value) => strtoupper($value),
    set: fn ($value) => strtoupper($value)
))->withoutObjectCaching();

//  新的 make() 静态构造方法
return Attribute::make(
    get: fn ($value) => strtoupper($value),
    set: fn ($value) => strtoupper($value)
)->withoutObjectCaching();

Arr::keyBy 方法

Douglas Medeiros 贡献了一个 Arr::keyBy() 方法,它的作用类似于集合 keyBy() 方法:

$array = [
    ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
    ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
    ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
];

Arr::keyBy($array, 'id');

/*
[
    '123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
    '345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
    // 原始数组的第二个元素被最后一个元素所覆盖,因为他们有相同的 id
]
*/

期望输出包含测试的断言

Francisco Madeira 贡献了expectsOutputToContain 测试方法来断言 artisan 命令包含一个输出子串:

$this->artisan('Hello World')
     ->expectsOutputToContain('Hello');

使用 Mail::alwaysTo 时添加 X 标头

Craig Morris 贡献了在使用 Mail::alwaysTo() 方法时在开发中添加 X 标头:

在开发环境中使用Mail::alwaysTo 时,原来的To、Cc 和Bcc 会丢失。 这使得在测试过程中很难确定电子邮件的去向。

此 PR 将原始到、抄送和密件抄送添加到电子邮件中的 X-Headers 中,以便可以检索此信息,同时阻止将电子邮件发送给这些收件人。

这对于调试预期的 toccbcc 字段很有用,但仅将电子邮件发送到指定的 alwaysTo 地址。 查看 Pull Request #41101 了解详情。

将 Laravel CORS 集成到框架中

Dries Vintsfruitcake/laravel-cors 包迁移到 Laravel 框架中:

主要原因是我们除了要消除框架的另一个依赖外,还要删除我们所依赖的循环依赖。

代码的所有功劳都归于@fruitcake 的@barryvdh。 感谢您维护该软件包这么久!

Str::betweenFirst 方法

Yoeri Boven 提供了一个 betweenFirst() 方法,它可以截取指定字符串,给定的两个值之间最短的部分:

Str::betweenFirst('[a]ab[b]', '[', ']'); // a
Str::betweenFirst('foofoobar', 'foo', 'bar'); // foo
Str::betweenFirst('hannah', 'ha', 'ah'); // nn
Str::betweenFirst('dddabcddd', 'a', 'c')); // b

允许为规则对象指定自定义消息

Ryan Chandler 提供了一种在使用 规则 对象进行验证时指定自定义错误消息的方法。通过此更新,您可以向消息数组提供自定义消息:

$request->validate(
    [
        'foo' => [new Example]
    ],
    [
        Example::class => '我的自定义消息在这里!'
    ]
);

发行说明

您可以在下面查看新功能和更新的完整列表以及在 GitHub 上 9.1.0 和 9.2.0 之间的差异 。以下发行说明直接来自 变更日志

v9.2.0

新增

  • 添加了 Illuminate/Database/Eloquent/Casts/Attribute::make() (#41014)
  • 添加了 Illuminate/Collections/Arr::keyBy() (#41029)
  • 将 expectsOutputToContain 添加到 PendingCommand。 (#40984)
  • 添加了使用 JsonSerializable 实例提供 HTTP 客户端方法的功能 (#41055)
  • 添加了 Illuminate/Filesystem/AwsS3V3Adapter::getClinet() (#41079)
  • 在 Builder::whereRelation 中添加了对枚举的支持 (#41091)
  • 使用 Mail::alwaysTo 时添加了 X 标头 (#41101)
  • 在查询中添加支持按位运算符 (#41112)
  • 将 Laravel CORS 集成到框架中 (#41137)
  • 添加了 Illuminate/Support/Str::betweenFirst() (#41144)
  • 允许为 Rule 对象指定自定义消息 (#41145)

修复

  • 修复了包含 UNICODE 异常的队列 Failed_jobs 插入问题 (#41020)
  • 修复了尝试在 Mock 上记录弃用的问题 (#41057)
  • 修复 loadAggregate 未正确应用强制转换 (#41050)
  • 不转换 JsonSerializable 实例到 HTTP 客户端方法中的数组 (#41077)
  • 修复解析 config(‘database.connections.pgsql.search_path’) (#41088)
  • Eloquent: firstWhere 返回 Object 而不是 NULL (#41099)
  • 修复了使用提供的合格 updated_at 更新的问题(#41133
  • 修复了 MailChannel 的 setPriority 调用(#41120)
  • 修复 route:list 命令输出 (#41177)
  • 修复数据库迁移 $connection 属性 (#41161)

变更的

  • 游标分页:将原始列转换为表达式 (#41003)
  • 在 Paginator 上将 $perPage 转换为整数 (#41073)
  • 恢复 S3 客户端额外选项 (#41097)
  • Illuminate/Notifications/HasDatabaseNotifications.php 中的 notifications() 中使用 latest() (#41095)
  • 删除重复查询以查找批处理 (#41121)
  • 删除 FormRequest::validated() 中的冗余检查 (#41115)
  • Illuminate/Support/Facades/Storage::fake() 已更改 (#41113)
  • 使用 PHP >= 7.4 提供的合并相等 (#41174)
  • is_countable() 简化一些条件 (#41168)
  • AWS 临时 URL 选项传递给 createPresignedRequest 方法 (#41156)
  • 让 Multiple* 异常保持找到的记录和项目的数量 (#41164)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-9-2-0

译文地址:https://learnku.com/laravel/t/65434

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

俄罗斯进攻乌克兰都没有你Laravel升级版本快

2年前 评论

俄罗斯进攻乌克兰都没有你Laravel升级版本快

2年前 评论

还沉浸在 9.0,一下就 9.2 了,按照这个速度 5 月就能看到 Laravel 10.0 了。

2年前 评论

Dries Vints 将 fruitcake/laravel-cors 包迁移到 Laravel 框架中:

为啥我吧 composer 的这个包移除 就报错了 - .-

laravel9.2

2年前 评论

我现在还在小心翼翼的把自己5.x项目慢慢升级中,到现在我项目还没几个用8.x,结果都9.2了,升级的太快了,我跟不上部队了都。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!