Laravel 团队最近先后发布了 9.29 和 9.30,其中包含只读文件系统选项、作用域文件系统驱动程序、丢弃模型更改的能力等等。

注意:我们上次介绍了 Laravel 9.28.0,因此本文内容同时涵盖了 9.29 和 9.30。

只读文件系统配置选项

Frank de Jonge 贡献了一个 pull request 有助于将文件系统磁盘配置为以只读模式运行。确保了磁盘上不可能有写操作,这在访问要确保不操纵任何文件的存储时很有用。

下面是 pull request 中针对此功能的配置示例:

$disk = $filesystem->build([
    'driver' => 'local',
    'read-only' => true,
    'root' => 'my-custom-path',
    'url' => 'my-custom-url',
    'visibility' => 'public',
]);

作用域文件系统驱动程序

Frank de Jonge 还提供了作用域文件系统驱动程序,它提供了一种重用磁盘配置的方法。以下是 pull request 描述中的示例:

[
    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        'throw' => false,
    ],
    's3_videos' => [
        'driver' => 'scoped',
        'prefix' => 'path/for/videos',
        'disk' => 's3',
    ],
]

为所有的 “make” 命令增加一个强制选项

James Brooks 为所有的 make:* 命令增加了一个 --force 选项,这在你需要重新创建文件时很有帮助。

“Required if accepted” 验证规则

Pascal Baljet 贡献了一个 required_if_accepted 验证规则,当另一个字段被接受通过时(值为 yeson1, 或 true)则验证下的字段是必填的:

Validator::make([
    'is_company'   => 'on',
    'company_name' => 'Apple',
], [
    'is_company'   => 'required|boolean',
    'company_name' => 'required_if_accepted:is_company',
]);

舍弃 Eloquent 模型的变动

Mior Muhammad Zaki 贡献了一个 discardChanges() 函数,该函数能够舍弃模型属性的变动并重置其原始状态:

$user = new EloquentModelStub([
    'name' => 'Taylor Otwell',
]);

$user->getOriginal('name'); // null

$user->getAttribute('name'); // Taylor Otwell
$user->discardChanges();
$user->getAttribute('name'); // null

判断附件是否存在

Andrew Minion 有助于确定给定的附件是否包含在邮件中。添加了三种方法,可以帮助在测试中断言附件:

$mailable = new InvoicePaid($user);

// Test normal attachment.
$this->assertTrue(
    $mailable->hasAttachment('Receipt.pdf')
);

// Test attachment from storage disk.
$this->assertTrue(
    $mailable->hasAttachmentFromStorageDisk('s3', 'invoices', $user->latest_invoice->name)
);

// Test raw attachment.
$this->assertTrue(
    $mailable->hasAttachedData('12345', 'confirmation.txt')
);

发行说明

你可以在下方查看新功能和更新的完整列表以及 [9.28.0 和 9.30.0] 之间的差异 (https://github.com/laravel/framework/compare/v9.27.0…v9.28.0)  。

以下发行说明直接来自 changelog

v9.30.0

添加

  • 向记录器添加了 stop_buffering 配置选项 (#44071)
  • 添加只读文件系统适配器装饰作为配置选项 (#44079)
  • 添加了作用域文件系统驱动程序 (#44105)
  • 为所有 make 命令添加强制选项 (#44100)

修复

  • 修复了不具有数组条件的查询生成器 (#44083)

更改

  • 将事件传递到队列监听器的 viaQueue 和 viaConnection (#44080)
  • 提高批处理作业的可测试性 (#44075)
  • 在 cron 表达式中允许任何类型的空格 (#44110)

v9.29.0

添加

  • 添加了 RequiredIfAccepted 验证规则 (#44035)
  • 添加 Illuminate/Foundation/Vite::assetPath() (#44037)
  • 添加了放弃 Eloquent 模型更改的功能 (#43772)
  • 增加了确定附件是否存在的能力 Illuminate/Mail/Mailable (#43967)
  • 添加 Illuminate/Support/Testing/Fakes/BusFake::assertNothingBatched() (#44056)

Reverted

Fixed

  • 避免在 PHP 8.1 上将 null 传递给参数异常 (#43951)
  • 将记住我的 Cookie 持续时间与 CookieJar 过期时间对齐 (#44026)
  • 使用 Enumerable 修复 Stringable 类型提示 (#44030)
  • 修复了带有文件响应的中间件 “SetCacheHeaders” (#44063)

Changed

  • 不要为 PlanetScale 的 MySQL 兼容 Vitess 引擎的队列作业弹出使用锁 (#44027)
  • 避免在自定义存根模板中匹配 “使用” Illuminate/Console/GeneratorCommand.php (#44049)

(adsbygoogle = window.adsbygoogle || []).push({});