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)
- 使迁移命令隔离 (#44743, ac3252a)
修复
- 修复了使用 Eloquent 严格模式时的 whenPivotLoaded (As) api 资源方法 (#44792)
- 修复了在父视图中使用 $attributes 时的组件视图错误 (#44778)
- 修复了在模型查询中使用 existsOr 和 doesntExistOr 方法时忽略全局范围的问题 (#44795)
更新
- 必要时重新编译视图 (#44737)
- 在未配置广播连接时引发有用的异常 (#44745)
- 运行时防止启动提供程序 env:encrypt (#44758)
- 为预加载资源添加随机数 (#44747)
- 预加载视图时继承跨域属性 (#44800)