Laravel 9.31 发布

Laravel 团队发布了 9.31 版本,其中包含请求声明周期持续性处理程序、更新模型而不改变时间戳、用于测试的虚假批处理程序等:

请求声明周期的持续时间处理程序

Tim MacDonald 在请求声明周期超过给定时间限制时提供了一个回调处理程序:

use Carbon\CarbonInterval as Interval;
use Illuminate\Contracts\Http\Kernel;

public function boot()
{
    if ($this->app->runningInConsole()) {
        return;
    }

    $kernel = $this->app[Kernel::class];
    $kernel->whenRequestLifecycleIsLongerThan(
        Interval::seconds(1),
        fn ($startedAt, $request, $response) => /* ... */
    );
}

这个回调类似 Laravel 9.18 Released 中发布的累计数据库查询时间,但是它是针对请求的声明周期。

模型「无时间戳」功能

Tim MacDonald 贡献了一个静态的withoutTimestamps()方法,其中updated_at将不会改变:

$user = User::first();

// `updated_at` 不会被改变...

User::withoutTimestamps(
    fn () => $user->update(['reserved_at' => now()])
);

Vite manifestHash 函数

Enzo Innocenzi 为 Vite 贡献了一个manifestHash() 方法,如果清单存在,它将返回一个唯一的哈希。这可用于使资产无效。
更多详情请参考 Pull Request #44136

伪批次

Taylor Otwell 贡献的伪批次:

目前很难测试一个批处理是否被取消,或者一个作业是否向批处理加入了额外的作业。你必须手动创建 FakeBatch 并覆盖 cancel / add 方法等。
这样就解决了这些问题。

[$job, $batch] = (new TestJob)->withFakeBatch();

$job->handle();

$this->assertTrue($batch->cancelled());
$this->assertNotEmpty($batch->added);

模型 getAppends() 方法

Arturo Rodríguez 为模型添加了一个访问器方法,以获得被追加到模型数组的访问器。这对自定义模型映射很有用:

$model->getAppends();

Str warp 静态方法

Steve Bauman 添加了一个缺失的静态 Str::wrap() 方法,它只能通过 Stringable 来使用 :

Str::wrap('-bar-', 'foo', 'baz'); // 'foo-bar-baz'
str('-bar-')->wrap('foo', 'baz'); // 'foo-bar-baz'

Macroable vite

Tim MacDonaldIlluminate\Foundation\Vite 贡献了 Macroable trait 特性,以创建与你 JS 配置匹配的别名:

Vite::macro('image', fn ($asset) => $this->asset("resources/images/{$asset}"));

// Usage: <img src="{{ Vite::image('profile.png') }}" ... >

更多详情请看 Pull Request #44198

发行说明

你可以在 GitHub 上看到以下完整的新功能和更新列表以及 9.30.0 和 9.31.0 的区别。以下发行说明直接来自 changelog:

v9.31.0

新增

  • PostgreSQL 增加了独特的可延缓的初始延迟常量 (#44127)
  • 请求声明周期持续时间处理程序 (#44122)
  • 增加了 Model::withoutTimestamps(...) (#44138)
  • Illuminate\Foundation\Vite 添加了 manifestHash 函数 (#44136)
  • 增加了对太空操作符 <=> 的支持  (#44154)
  • 增加了 Illuminate/Database/Connection::registerDoctrineType() ,可以接受新声明的类型的对象和类名 (#44149)
  • 增加了 伪批处理 Fake Batches (#44104#44173)
  • 增加了 Model::getAppends() 方法 (#44180)
  • 增加了缺失的 Str::wrap() 静态方法 (#44207)
  • 增加了需要的  symfony/uid (#44202)
  • 使 Vite 可宏化 (#44198)

修复

  •  Illuminate/Http/Client/PendingRequest (#44179) 的异步修复
  • 修复了带有 PHP_CLI_SERVER_WORKERS 环境变量的 artisan serve 命令 (#44204)
  • 修复 InteractsWithDatabase::castAsJson($value) 不正确处理 SQLite 数据库 (#44196)

更改

  • 改进 Blade 编译的异常信息 (#44134)
  • 改进测试失败输出 (#43943)
  • 迁移时提示创建MySQL数据库(#44153)
  • 改进对 Eloquent 的 UUID 和 ULID 支持 (#44146)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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