Laravel 团队本周发布了 9.40 版本,包含了新的彩票实用类、新的验证规则、断言重定向到指定路由等等。
彩票实用类
Tim MacDonald 贡献了一个 Lottery
支持类,可以在各种设置中使用,如随机数据抽样、故障报告等。
下面是一个基本 API 的例子:
Lottery::odds(1, 10)->choose();
// returns `true` for "win"
// returns `false` for "loss"
Lottery::odds(1, 10)
->winner(fn () => 'winner')
->loser(fn () => 'loser')
->choose();
// returns `"winner"` for "win"
// returns `"loser"` for "loss"
以下是来自 pull request 的一些特定于 Laravel 的示例,在这个示例中,Lottery 可以与 Laravel 的其他功能一起使用。在下面的例子中,Lottery
调用链返回一个 ‘ 可调用 ‘ 实例,你可以在各种 Laravel 事件中注册为处理程序:
// 随机抽样,这样我们就不会淹没错误处理程序…
DB::whenQueryingForLongerThan(
Interval::seconds(2),
Lottery::odds(1, 100)->winner(fn () => report('DB queries exceeded 2 seconds'))
);
// 随机抽样,这样我们就不会淹没错误处理程序…
Model::handleLazyLoadingViolationUsing(Lottery::odds(1, 5000)->winner(function ($model, $relation) {
report(new LazyLoadingViolationException($model, $relation));
}));
Laravel helpers 文档 提供了有关如何使用此类以及如何对其进行测试的示例。
model:show 命令中列出的 Eloquent 模型观察者
Mike Healy 贡献了对 model:show
命令的更新,其中列出了模型观察者对于给定模型:
它还处理附加到同一模型操作的多个观察者。列出观察者有助于快速找到模型的列出观察者,而无需寻找服务提供商调用。
小写和大写验证规则
Tim MacDonald 提供了一个 lowercase
验证规则,它强制验证的输入是小写的。当您不想默默地将用户信息更改为小写字母,但又想确保他们只插入小写字母时,这可能很有用。例如,创建数据库用户但强制用户全部小写的输入。
Validator::make(
['name' => 'Admin'],3 ['name' => 'required|string|lowercase']4);
Michael Nabil 贡献了一个 uppercase
验证规则,确保给定的输入都是大写字母:
Validator::make(
['name' => 'ADMIN'],
['name' => ['required', 'string', 'uppercase']
);
断言重定向到路由
Zaher Ghaibeh 贡献了一个 assertRedirectToRoute
方法,你可以用来断言响应是否是给定命名路由的重定向:
this->get('test-route')
->assertRedirectToRoute('named-route');
批量静默保存模型
Niels 贡献了一个 saveManyQuietly
方法,用于静默保存多对多和一对一,或者其他关系的模型。
$model->saveManyQuietly($relatedModels);
发行说明
你可以在 GitHub 上看到以下新功能和更新的完整列表以及 9.39.0 和 9.40.0 之间的差异。以下是直接来自 changelog 的发布说明:
v9.40.0
新增
- 在 model:show 命令中包含 Eloquent 的模型观察者 (#44884)
- 新增 「lowercase」验证规则 (#44883)
- 介绍
Lottery
类 (#44894) - 新增
/Illuminate/Testing/TestResponse::assertRedirectToRoute()
(#44926) - 新增 uppercase 验证规则 (#44918)
- 将 saveManyQuietly 添加到 hasOneOrMany 和 belongsToMany 模型关系 (#44913)
修复
- 修复具有构造函数参数的类的 HasAttributes::getMutatedAttributes (#44829)
修改
- 删除控制台的参数分配 (#44888)
- 在队列中将 $maxExceptions 从 mailable 传递给底层作业 (#44903)
- 公开 Vite::isRunningHot (#44900)
- 添加方法以能够覆盖异常上下文格式 (#44895)
- 为 TrimStrings 中间件中的修剪字符添加零宽度空间 (#44906)
- 如果 key:generate artisan 命令失败则显示错误 (#44927)
- 更新数据库版本检查以锁定 PlanetScale (#44925)
- 将没有 Trashed 的函数移动到 DatabaseRule (#44938)
- 为 MySQL 和 PostgreSQL 在 Schema::getColumnListing () 和 Schema::hasTable () 上使用写连接 (#44946)