Laravel 9.38版本发布

2023-06-01 00:00:00 laravel 版本 发布

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

相关文章