Laravel 9.10版本发布
Laravel 团队发布了 9.10,其中包含一个 findOr() Eloquent 方法、一个新的命令断言、将输入作为 Stringable 实例检索等等:
刷新数据库功能之前
Rok Sprogar 为 RefreshDatabase 特征贡献了一个 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 () => '...');
// Also works with relations
$user->posts()->findOr(1, fn () => '...');
可定制的编译扩展
Taylor Otwell 贡献了一个可配置的编译视图扩展,当传递到刀片编译器时,该扩展可通过视图配置进行定制:
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 运算符提供了支持。
有关详细信息,请参阅拉取请求 #42123。
https://github.com/laravel/framework/pull/42123
从请求中检索输入作为字符串
Cameron Wilby 和 Taylor Otwell 贡献了从请求中检索输入作为 Stringable 实例的能力:
$name = $request->string('name');
// or
$name = $request->str('name');
将作业追加和前置到现有链
Jan-Oliver Pantel 贡献了 prependToChain() 和 appendToChain 方法来追加和前置作业:
用例是每当链中的作业想要 [原文如此] 将作业排入它自己的链上,
而无需创建新的并等待“子链”的成功执行。
这在技术上已经成为可能,因为所有需要的属性和方法都是公开的。
但是,为此具有形式化的功能可以实现更好的 DX。
有关详细信息,请参阅拉取请求 #42138。
https://github.com/laravel/framework/pull/42138
发行说明
您可以在下面查看新功能和更新的完整列表以及 GitHub 上 9.9.0 和 9.10.0 之间的差异。
以下发行说明直接来自变更日志:
https://github.com/laravel/framework/compare/v9.9.0...v9.10.0
https://github.com/laravel/framework/blob/1dd741f76d255fbc16edb0f350d6654a648ef102/CHANGELOG.md#v9100---2022-04-27
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 (c9d34b7) 添加了 str 和 string 方法
添加了将作业附加和前置到现有链的方法 (#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)
更新计划:列表着色输出 (#42153)
转:
https://laravel-news.com/laravel-9-10-0
相关文章