Laravel 9.38版本发布
Laravel团队在本周发布了9.38版本,包括隔离的工匠命令,有条件地设置通知中间件,可配置的可排队通知的最大异常,以及更多。
> 今天的Laravel 9.38.0版本引入了可隔离的命令。确保每次只有一个Artisan命令的实例在运行。
使用起来很方便 - 我们已经在 "migrate "命令中加入了对它的支持. 在部署过程中很方便。
文档:https://t.co/35lcZJZHPO pic.twitter.com/tLln5thJHO
- Taylor otwell (@taylorotwell) 2022年11月1日
隔离的Artisan命令
Oliver Nybroe贡献了一个可隔离的界面,使其能够轻而易举地确保你的命令一次只运行一个进程。
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;
class SendEmails extends Command implements Isolatable
{
// ...
}
第一个包含Isolatable接口的artisan命令是artisan migrate命令。
使用--isolated标志,你可以将迁移限制在一个活动进程中,
并确保两个服务器不能同时运行迁移命令。
php artisan migrate --isolated
注意:
隔离迁移不是默认的,它是在--isolated标志后面发布的,以减少破坏变化的机会。
关于如何在你的命令中使用这个功能的更多细节,请参见Isolatable Commands文档。
https://laravel.com/docs/9.x/artisan#isolatable-commands
设置会话存储处理程序
Samuel Štancl为session Store类贡献了一个setHandler方法。在拉动请求的描述中,有这样一段话:"为什么这很有用?
> 使用的情况是,当你临时改变数据库连接时,数据库会话驱动程序可能会遇到问题,
它试图在一个不再存在的DB连接上运行查询......通过添加setter,
我可以临时重建DatabaseSessionHandler,使其使用正确的DB连接。
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 贡献了排队通知使用最大例外的能力。在你有很多重试的情况下,设置最大例外是有帮助的。
也许排队的通知被第三方限制了速率,或者其他方面不会成功,而你想自定义允许的最大例外数量。
更多细节和例子请参见Pull Request #44773。
https://github.com/laravel/framework/pull/44773
发布说明
你可以在GitHub上看到以下完整的新功能和更新列表以及9.37.0和9.38.0之间的差异。
下面的发行说明直接来自更新日志。
https://github.com/laravel/framework/compare/v9.37.0...v9.38.0
https://github.com/laravel/framework/blob/cd7f19d3e4c09c170bef13663aad96077c201789/CHANGELOG.md#v9380---2022-11-01
v9.38.0
已添加
已添加 Illuminate/Routing/Route::flushController() (#44393)
已添加 Illuminate/Session/Store::setHandler() (#44736)
为slug帮助器添加了字典(#44730)。
增加了根据可通知的实例和通道来设置中间件的功能(#44767)
为Model添加了touchQuietly便利方法(#44722)
增加了Illuminate/Routing/Router::removeMiddlewareFromGroup() (#44780)
允许可排队的通知设置maxExceptions (#44773)
让migrate命令与外界隔离(#44743,ac3252a)。
修复了
修正了使用Eloquent严格模式时的whenPivotLoaded(As) api资源方法(#44792)
修正了在父视图中使用$attributes时的组件视图错误(#44778)。
修正了在模型查询中使用existOr和doesntExistOr方法时无视全局范围的问题(#44795)
更改了
必要时重新编译视图(#44737)
未配置广播连接时抛出有意义的异常(#44745)
当运行env:encrypt时,防止启动供应商(#44758)
为预装资产添加了nonce (#44747)
在预装视图时继承跨源属性 (#44800)
转:
https://laravel-news.com/laravel-9-38-0
相关文章