Laravel 9.38 发布

Laravel 团队在本周发布了 9.38 版本,增加了隔离的 artisan 命令,有条件地设置通知中间件,可配置的可排队通知的最大异常,以及其他功能。

隔离的 Artisan 命令

Oliver Nybroe 贡献了一个 Isolatable 接口,从而能够很容易地确保你的命令一次只运行一个进程。

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;

class SendEmails extends Command implements Isolatable
{
    // ...
}

第一个包含 Isolatable 接口的 artisan 命令是 artisan migrate 命令。使用 --isolated 标志,你可以将 migrate 限制在一个活动进程中,并确保两个服务器不能同时运行迁移命令:

php artisan migrate --isolated

注意:隔离迁移不是默认的,它是在 --isolated 标志后面发布的,以减少出现破坏性变化的概率。

有关如何在命令行中使用此功能的更多详细信息,请参阅 Isolavel Commands 文档。

设置 Session 存储处理程序

Samuel Štancl 为 session Store 类贡献了一个setHandler 方法。 PR 说明了为什么这很有用:

用例是,当动态更改数据库连接时,数据库会话驱动程序可能会遇到问题,它试图在已经不存在的数据库连接上运行查询...通过添加设置器,可以重建动态的 DatabaseSessionHandler 并使其使用正确的数据库连接。

Slug 助手词典

@Dhemy 贡献了一个在调用 Str::slug() 时为特殊字符提供可自定义的字典:

$ php artisan tinker

>>> Str::slug('500$ bill');
=> "500-bill"

>>> Str::slug(
...     title: '500$ bill',
...     dictionary: ['@' => 'at', '$' => 'dollar']
... );
=> "500-dollar-bill"

有条件地设置通知中间件

Andrew Monty 贡献了基于通知和通道实例设置通知中间件的能力。 这是拉取请求描述中的一个示例:

public function middleware($notifiable, $channel)
{
    if ($notifiable instance of User && $notifiable->isAdmin()) {
        return [];
    }

    if ($channel == 'email') {
        return [new RateLimited('mailgun')];
    }

    return [];
}

新增 touchQuietly 模型便捷方法

Craig Anderson 提供了一种方便的方法 touchQuietly() 来在更新模型的更新时间戳而不引发任何事件:

$model->touchQuietly();

从路由组中删除中间件

Mateus Guimarães 促成了从组中删除中间件的能力。 如果您需要动态注册或删除中间件,此功能会很有帮助。

$router->removeMiddlewareFromGroup(
    'web',
    'test-middleware'
);

队列通知可以设置最大异常

Andrew Monty 贡献了队列通知使用最大异常的能力。设置最大异常在有多次重试的设置中很有帮助。也许排队的通知受到第三方的速率限制,或者不会成功,并且想要自定义最大异常数。

查看 PR #44773 了解更多详细信息和示例。

发行说明

你可以在下方查看新功能和更新的完整列表以及 9.37.0 和 9.38.0 之间的差异。 以下发行说明直接来自 changelog

v9.38.0

新增

  • 新增 Illuminate/Routing/Route::flushController() (#44393)
  • 新增 Illuminate/Session/Store::setHandler() (#44736)
  • 新增 字典到 Slug 助手 (#44730)
  • 新增 基于可通知实例和通道设置中间件的功能 (#44767)
  • 新增 touchQuietly() 模型的便捷方法 (#44722)
  • 新增 Illuminate/Routing/Router::removeMiddlewareFromGroup() (#44780)
  • 允许 队列通知设置最大异常数(#44773)
  • 使迁移命令隔离(#44743ac3252a)

修复

  • 修复了使用 Eloquent 严格模式时的 whenPivotLoaded(As) api 资源方法 (#44792)
  • 修复了在父视图中使用 $attributes 时的组件视图错误 (#44778)
  • 修复了在模型查询中使用 existsOr 和 doesntExistOr 方法时忽略全局范围的问题 (#44795)

更新

  • 必要时重新编译视图 (#44737)
  • 在未配置广播连接时引发有用的异常 (#44745)
  • 运行时防止启动提供程序 env:encrypt (#44758)
  • 为预加载资源添加随机数 (#44747)
  • 预加载视图时继承跨域属性 (#44800)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

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

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