Laravel团队发布9.31版本,增加了请求生命周期持续时间处理程序

134 阅读2分钟

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` is not changed...
 
User::withoutTimestamps(
    fn () => $user->update(['reserved_at' => now()])
);

Vite manifestHash函数

Enzo InnocenziVite 类贡献了一个manifestHash() 方法,如果清单存在,它将返回一个唯一的哈希值。这可用于废止资产。

假的批处理

Taylor Otwell贡献了假批次。

目前很难测试某批作业是否被取消,或者某批作业是否增加了额外的作业等情况。你必须手动创建一个FakeBatch并覆盖取消/添加方法等。

这就解决了这个问题。

[$job, $batch] = (new TestJob)->withFakeBatch();
 
$job->handle();
 
$this->assertTrue($batch->cancelled());
$this->assertNotEmpty($batch->added);

模型getAppends()方法

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

$model->getAppends();

Str wrap静态方法

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

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

Macroable vite

Tim MacDonaldMacroable 特质贡献给了Illuminate\Foundation\Vite ,以创建符合你的JS配置的别名。

Vite::macro('image', fn ($asset) => $this->asset("resources/images/{$asset}"));
 
// Usage: <img src="{{ Vite::image('profile.png') }}" ... >

发布说明

你可以在GitHub上看到以下完整的新功能和更新列表以及9.30.0和9.31.0之间的差异。下面的发行说明是直接来自于更新日志

v9.31.0

已添加

  • 为PostgreSQL增加了独特的可延缓的初始延缓常量(#44127)。
  • 请求生命周期持续时间处理程序(#44122)
  • 已添加 Model::withoutTimestamps(...)(#44138)
  • 为Illuminate\Foundation\Vite添加了manifestHash函数(#44136)
  • /Illuminate/Collections/Traits/EnumeratesValues::operatorForWhere() 中增加了对操作符<=>的支持(#44154)
  • 增加了Illuminate/Database/Connection::registerDoctrineType()可以接受对象以及新教义类型的类名(#44149)
  • 添加了虚假批次(#44104,#44173)。
  • 添加了Model::getAppends() (#44180)
  • 添加了缺失的Str::wrap()静态方法(#44207)
  • 添加了 requiresymfony/uid (#44202)
  • 使得Vite可以进行宏操作(#44198)

修复了

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

改变了

  • 改进刀片编译的异常信息(#44134)
  • 改进测试失败输出(#43943)
  • 迁移时提示创建MySQL数据库(#44153)
  • 改进对Eloquent的UUID和ULID支持(#44146)