Laravel 9.2 发布
发布时间 作者 Paul Redmond
Laravel 团队发布了版本 9.2.0
,其中包含一个数组 keyBy
方法、一个 Eloquent 属性静态构造函数、将 Laravel CORS 包移入框架等等
属性 Make 方法
@ARI 为 Eloquent Attribute
类贡献了一个静态构造函数方法,该方法提供了以下便利性
// Using the new keywordreturn (new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => strtoupper($value)))->withoutObjectCaching(); // The new make() static constructor methodreturn Attribute::make( get: fn ($value) => strtoupper($value), set: fn ($value) => strtoupper($value))->withoutObjectCaching();
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'] // The second element of an original array is overwritten by the last element because of the same id]*/
预期输出包含测试断言
Francisco Madeira 为断言 artisan 命令包含输出子字符串贡献了一个 expectsOutputToContain
测试方法
$this->artisan('Hello World') ->expectsOutputToContain('Hello');
Mail::alwaysTo
时添加 X
标头
使用 Craig Morris 贡献了在开发环境中使用 Mail::alwaysTo()
方法添加 X
标头的方法
在开发环境中使用
Mail::alwaysTo
时,原始 To、Cc 和 Bcc 会丢失。这使得在测试期间很难确定电子邮件将要发送到哪里。此 PR 将原始的 to、cc 和 bcc 添加到电子邮件中的 X-Headers 中,以便可以检索此信息,同时仍然阻止将电子邮件发送到这些收件人。
这对于调试预期的 to
、cc
和 bcc
字段很有用,但只将电子邮件发送到指定的 alwaysTo
地址。查看 Pull Request #41101 以了解详细信息。
将 Laravel CORS 集成到框架中
Dries Vints 将 fruitcake/laravel-cors 包迁移到 Laravel 框架中
主要原因是,除了消除骨架的另一个依赖项之外,我们还希望消除我们依赖的循环依赖项。
所有代码功劳归于 @barryvdh 的 @fruitcake 。感谢您长期维护该软件包!
字符串 "Between First" 方法
Yoeri Boven 贡献了一个 betweenFirst()
方法,该方法获取两个给定值之间字符串的最小可能部分
Str::betweenFirst('[a]ab[b]', '[', ']'); // aStr::betweenFirst('foofoobar', 'foo', 'bar'); // fooStr::betweenFirst('hannah', 'ha', 'ah'); // nnStr::betweenFirst('dddabcddd', 'a', 'c')); // b
允许为规则对象指定自定义消息
Ryan Chandler 贡献了一种方法,可以在使用 Rule
对象验证时指定自定义错误消息。通过此更新,您可以为消息数组提供自定义消息
$request->validate( [ 'foo' => [new Example] ], [ Example::class => 'My custom message goes here!' ]);
发行说明
您可以在下面看到新功能和更新的完整列表,以及 9.1.0 和 9.2.0 之间的差异。以下发行说明直接来自 更改日志
v9.2.0
新增
- 新增
Illuminate/Database/Eloquent/Casts/Attribute::make()
(#41014) - 新增
Illuminate/Collections/Arr::keyBy()
(#41029) - 新增 PendingCommand 的 expectsOutputToContain。 (#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) - 允许为规则对象指定自定义消息 (#41145)
修复
- 修复包含 UNICODE 的异常的 Queue Failed_jobs 插入问题 (#41020)
- 修复尝试在模拟对象上记录弃用 (#41057)
- 修复 loadAggregate 未正确应用转换 (#41050)
- 在 HTTP 客户端方法中不要将 JsonSerializable 实例转换为数组 (#41077)
- 修复解析 config('database.connections.pgsql.search_path') (#41088)
- Eloquent:firstWhere 返回对象而不是 NULL (#41099)
- 修复使用提供的限定更新时间进行更新 (#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 提供的 coalesce 等效项 (#41174)
- 使用 is_countable() 简化一些条件 (#41168)
- 将 AWS 临时 URL 选项传递给 createPresignedRequest 方法 (#41156)
- 让 Multiple* 异常保存找到的记录数和项目数 (#41164)