Laravel 9.10 发布

Laravel 团队发布了 9.10,其中包括一个 findOr() Eloquent 方法, 一个新的命令断言,将输入作为字符串实例检索等等:

刷新数据库前置函数

Rok SprogarRefreshDatabase 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 时提供了对 isis not 运算符的支持。有关详细信息,请参阅 Pull Request #42123

从请求中检索输入作为字符串

Cameron WilbyTaylor 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 添加了 strstring 方法 (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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

服务提供者不能设置中间件组的问题终于修复了

1年前 评论

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