Laravel 9.10 发布
Laravel 团队发布了 9.10,其中包括一个 findOr() Eloquent 方法, 一个新的命令断言,将输入作为字符串实例检索等等:
刷新数据库前置函数
Rok Sprogar 为 RefreshDatabase
trait 贡献了一个 beforeRefreshingDatabase
。这允许您在数据库开始刷新之前运行代码:
class DataExportTest extends TestCase
{
use RefreshDatabase;
protected $seed = true;
protected function beforeRefreshingDatabase()
{
$this->artisan('db:wipe --database another-database-connection');
}
// ...
}
不期望输出命令断言
Markus Hebenstreit 贡献了一个自解释的 doesntExpectOutputToContain
命令断言方法。
Artisan::command('contains', function () {
$this->line('My name is Taylor Otwell');
});
$this->artisan('contains')
->doesntExpectOutputToContain('Taylor Otwell');
Eloquent 「findOr」 方法
Jess Archer 为 Eloquent 构造器和关系贡献了一个 findOr()
方法。此方法匹配现有的 firstOr()
方法:
User::findOr(1, fn () => throw new RuntimeException);
User::findOr(1, fn () => abort(403));
User::findOr(1, fn () => 'return something');
User::findOr(1, ['columns'], fn () => '...');
// 也适用于关系
$user->posts()->findOr(1, fn () => '...');
可定制的编译扩展
Taylor Otwell 提供了一个可配置的编译视图扩展,当传递到 Blade 编译器时,该扩展可通过 view
配置进行定制:
new BladeCompiler(
$app['files'],
$app['config']['view.compiled'],
$app['config']->get('view.relative_hash', false) ? $app->basePath() : '',
$app['config']->get('view.cache', true),
$app['config']->get('view.compiled_extension', 'php'),
);
支持「IS」和「IS NOT」PostgreSQL 运算符
Markus Koch 在使用 PostgreSQL 时提供了对 is
和 is not
运算符的支持。有关详细信息,请参阅 Pull Request #42123。
从请求中检索输入作为字符串
Cameron Wilby 和 Taylor Otwell 提供了从请求中检索输入作为 Stringable
实例的能力:
$name = $request->string('name');
// 或
$name = $request->str('name');
将作业附加到现有链中
Jan-Oliver Pantel 贡献了 prependToChain()
和 appendToChain
方法来追加和前置作业:
具体用例是每当任务链中的作业想要将作业排入其自己的链中,而无需创建新的并等待「子任务链」的成功执行。
这在技术上已经成为可能,因为所有需要的属性和方法都是公开的。但是,为此具有形式化的功能可以实现更好的 DX。
有关详细信息,请参阅 Pull Request #42138。
发行说明
你可以在下方查看新功能和更新的完整列表以及 GitHub 上 9.9.0 和 9.10.0 之间的差异。以下发行说明直接来自 changelog:
v9.10.0
新增
- 添加通过 MySQL 执行 upsert 时使用别名的能力 (#42053)
- Illuminate/Routing/Router::middlewareGroup() 将支持中间件数组 (#42004, e6b84fb)
- 在 schedule:list 上添加了 Missing AsCommand 属性(#42069)
- 将 beforeRefreshingDatabase 函数添加到 Testing/RefreshDatabase 特征 (#42073)
- 添加了 doesntExpectOutputToContain 断言方法 (#42096)
- 为 Eloquent 添加了一个 findOr 方法 (#42092)
- 允许在
Illuminate/View/Compilers/Compiler.php
中扩展 (68e41fd) - 支持「IS」和「IS NOT」PostgreSQL 运算符 (#42123)
- 向 Illuminate/Http/Concerns/InteractsWithInput 添加了
str
和string
方法 (c9d34b7) - 添加了将作业附加和前置到现有链的方法 (#42138)
修复
- 使不存在的作业直接失败而不是崩溃 (#42079)
- 修复 schedule:work 命令 Artisan 二进制名称 (#42083)
- 使用非 UTF8 字符修复 TrimStrings 中间件 (#42065)
- 从 Request::createFrom() 中的原始请求复制 locale 和 defaultLocale (#42080)
- 修复 JSON 会话序列化的 ViewErrorBag (#42090)
- 修复 CompiledRouteCollection::getRoutesByMethod() 中缓存路由的数组键 (#42078)
- 使用 JsonResponse::setData 修复 json_last_error 问题 (#42125)
- 修复 BelongsToMany 中返回不相关行的错误 (#42087)
- 访问非缓存属性时修复 HasAttributes::mutateAttributeForArray (#42130)
变更
- 使密码规则错误可翻译 (#42060)
- 重新设计 event:list 命令 (#42068)
- 更改事件:列表命令 (#42084)
- 抛出 LostDbConnectionException 而不是 LogicException (#42102)
- 抛出死锁异常 (#42129)
- 支持嵌套 ArrayAccess 对象的 Arr::forget() (#42142)
- 允许
Illuminate/Collections/Enumerable::jsonSerialize()
返回其他类型 (#42133) - 更新 schedule:list 输出着色 (#42153)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: