Laravel 8.32 发布,包含 HTTP 客户端转储方法、队列异常限流、流畅的 JSON 断言等功能
发布于 作者 Paul Redmond
Laravel 团队发布了 8.32 版本,其中包含 HTTP 客户端转储方法、队列异常限流、流畅的 JSON 断言以及 8.x 分支的最新变化。
转储 Laravel HTTP 请求的辅助方法
Andrea Marco Sartori 为 Laravel HTTP 客户端贡献了 dump()
和 dd()
方法,因此您可以轻松地在调试期间检查请求。这些辅助方法将转储 HTTP Request
的实例和客户端选项。
Http::dump()->get($url);Http::dd()->post($url); // Dump additional values along with the request/client dataHttp::dd($var1)->post($url);
限制队列异常
Paras Malhotra 为队列贡献了一个 断路器 中间件。当您依赖不可靠的第三方 HTTP 服务时,此中间件可能很有用。
public function middleware(){ return [new ThrottlesExceptions(10, 5)];}
在上述示例中,如果作业连续失败十次,作业将被限流五分钟。您还可以使用 backoff()
方法在达到阈值之前等待重试,因为队列会立即重试失败的作业。
public function middleware(){ return [(new ThrottlesExceptions(10, 5))->backoff(5)];}
如果您想了解更多信息,队列文档现在包括有关 限制异常 的详细信息。
流畅的 JSON 断言
Claudio Dekker 为 Laravel 中的测试贡献了流畅的 JSON 断言。在撰写本文时,流畅的 JSON 断言方法似乎没有文档,但 拉取请求 详细介绍了这一点。
以下是如何使用从拉取请求中获取的流畅 API 的简单示例。
use Illuminate\Testing\Fluent\Assert; $response->assertJson(fn (Assert $json) => $json // Checking a root-level property ->has('podcast') // Checking that the podcast prop has a nested id property using "dot" notation ->has('podcast.id'));
此更新向后兼容现有的 assertJson()
调用,但现在允许使用 array
或 Closure
。
在 Model::destroy() 上支持 Eloquent 集合
Victor Dauchy 贡献了将 Eloquent 集合传递给模型 destroy 方法的能力。
// Previously you might use pluck or modelKeys()SomeModel::destroy( SomeModel::all()->pluck('whatever_primary_key'));SomeModel::destroy( SomeModel::all()->modelKeys()); // Now, passing a collection is possibleSomeModel::destroy(SomeModel::all());
您可以在下面查看完整的全新功能和更新列表,以及 8.31.0 和 8.32.0 之间的差异。以下发行说明直接来自 变更日志
v8.32.0
新增
- Phpredis 锁定序列化和压缩支持 (#36412, 10f1a93)
- 新增流畅的 JSON 断言 (#36454)
- 新增用于转储 Laravel HTTP 客户端请求的方法 (#36466)
- 新增
ThrottlesExceptions
和ThrottlesExceptionsWithRedis
作业中间件,用于不稳定的服务 (#36473, 21fee76, 36518, 37e48ba) - 新增对
Model::destroy()
上 Eloquent 集合的支持 (#36497) - 新增
rest
选项到php artisan queue:work
命令 (#36521, c6ea49c) - 新增
prohibited_if
和prohibited_unless
验证规则 (#36516) - 新增类
argument
到Illuminate\Database\Console\Seeds\SeedCommand
(#36513)
修复
- 修复验证器将 null 视为 (required|exclude)_(if|unless) 的 true,因为
in_array()
检查过于宽松 (#36504)