Laravel 10.14 发布
发布于 作者: Paul Redmond
本周,Laravel 团队发布了 v10.14,其中包含一个新的 `can` 验证规则、定义自定义 Gate 拒绝响应、全局 HTTP 客户端中间件、HTTP 客户端便捷方法等
最近合并到 Laravel 的 `Rule::can` 验证规则,允许您在表单输入上授权能力!🤩 这使您能够将一些授权逻辑从控制器移动到表单请求中 - 并显示验证错误,而不是自己处理它。 pic.twitter.com/UvC52Q8WZa
— Steve Bauman (@ste_bau) 2023 年 6 月 22 日
`can` 验证规则
Steve Bauman 贡献了 `Rule::can()` 验证规则,它提供了一种为给定表单字段授权能力的方法。以下是 Pull Request #47371 中给出的示例。假设有以下 `PostPolicy`
// Given the following policyclass PostPolicy{ // ... public function updateAuthor(User $user, Post $post) { return $user->isAdmin(); }}
我们可以验证用户是否有权更新作者
use App\Models\Post; class PostRequest extends FormRequest{ public function rules() { return [ 'author' => Rule::can('update-author', Post::class, $this->route('post')), 'title' => '...', 'body' => '...', ]; }}
在 `Gate@inspect()` 中设置自定义拒绝响应
Luke Kuzmish 贡献了当 Gate 的 `inspect()` 方法失败时设置返回响应的能力。例如,当与 `can()` 中间件结合使用时
class AppServiceProvider extends ServiceProvider{ public function boot() { Gate::setDenialResponse(Response::denyAsNotFound()); }}
全局 HTTP 中间件
Tim MacDonald 贡献了定义全局 HTTP 客户端中间件的能力,该中间件将应用于使用 HTTP 客户端发出的每个请求
// In a service provider... use Illuminate\Support\Facades\Http; // Global request middlewareHttp::globalRequestMiddleware( fn ($request) => $request->withHeader('User-Agent', 'Laravel Framework/1.0')); // Global response middlewareHttp::globalResponseMiddleware( fn ($response) => $response->withHeader('X-Finished-At', now()->toDateTimeString())); // Complete global middleware that wraps both request and responseHttp::globalMiddleware(function ($handler) { return function ($request, $options) use ($handler) { $startedAt = now(); return $handler($request, $options) ->then(fn ($response) => $response->withHeader( 'X-Duration', $startedAt->diffInMilliseconds(now()) )); };});
您还可以定义一次性中间件 - 查看 Pull Request #47525 中的所有详细信息,以了解可能的选项!
向 `PendingRequest` 添加 `withHeader()` 方法
Ralph J. Smit 贡献了一个 `withHeader` 方法,用于在使用 HTTP 客户端时设置单个标头
// Using an arrayHttp::baseUrl(config('services.active-campaign.endpoint') . '/api/3') ->withHeaders([ 'Api-Token' => config('services.active-campaign.token') ]) ->acceptJson(); // Setting a single header using `withHeader()`Http::baseUrl(config('services.active-campaign.endpoint') . '/api/3') ->withHeader('Api-Token', config('services.active-campaign.token')) ->acceptJson();
向 HTTP 客户端添加 `withQueryParameters` 方便方法
Matthieu Napoli 贡献了一个 `withQueryParameters()` 方法,作为定义始终应在 HTTP 请求上定义的查询参数的便利方法
// Using `withOptions()`Http::baseUrl('https://api.convertkit.com/v3/') ->withOptions([ 'query' => [ 'api_secret' => config('services.convertkit.api_secret'), ], ]) ->acceptJson(); // Using the new `withQueryParameters()` methodHttp::baseUrl('https://api.convertkit.com/v3/') ->withQueryParameters([ 'api_secret' => config('services.convertkit.api_secret'), ]) ->acceptJson();
发行说明
您可以在下面看到完整的新功能和更新列表,以及 10.13.0 和 10.14.0 之间的差异,在 GitHub 上。以下发行说明直接来自 变更日志
v10.14.0
- [10.x] 在 RedirectResponse 中添加 `withCookies` 方法的测试,作者:@milwad-dev,https://github.com/laravel/framework/pull/47383
- [10.x] 向 PDO Dete… 添加新的错误消息 "SSL: Handshake timed out" 处理,作者:@yehorherasymchuk,https://github.com/laravel/framework/pull/47392
- [10.x] 添加用于检测丢失连接的新错误消息,作者:@mfn,https://github.com/laravel/framework/pull/47398
- [10.x] 更新 Middleware 中 `except` 方法的 phpdoc,作者:@milwad-dev,https://github.com/laravel/framework/pull/47408
- [10.x] 针对 `$passwordTimeoutSeconds` 修复不一致的类型提示,作者:@devfrey,https://github.com/laravel/framework/pull/47414
- 更改 FileStore.php 中 `path` 方法的可见性,作者:@foremtehan,https://github.com/laravel/framework/pull/47413
- [10.x] 修复 `buildException` 方法的返回值类型,作者:@milwad-dev,https://github.com/laravel/framework/pull/47422
- [10.x] 允许序列化 NotificationSent,作者:@cosmastech,https://github.com/laravel/framework/pull/47375
- [10.x] `PredisConnector` 和 `PhpRedisConnector` 中的错误注释,作者:@hungthai1401,https://github.com/laravel/framework/pull/47438
- [10.x] 可以在 `Gate@inspect()` 中设置自定义拒绝响应,作者:@cosmastech,https://github.com/laravel/framework/pull/47436
- [10.x] 在 `addSingletonUpdate` 中删除不必要的参数,作者:@milwad-dev,https://github.com/laravel/framework/pull/47446
- [10.x] 修复 `prefixedResource` 和 `prefixedResource` 的返回值类型,作者:@milwad-dev,https://github.com/laravel/framework/pull/47445
- [10.x] 添加 Factory::getNamespace(),作者:@tylernathanreed,https://github.com/laravel/framework/pull/47463
- [10.x] 向 `ConditionallyLoadsAttributes` 特性添加 `whenAggregated` 方法,作者:@akr4m,https://github.com/laravel/framework/pull/47417
- [10.x] 添加 PendingRequest `withHeader()` 方法,作者:@ralphjsmit,https://github.com/laravel/framework/pull/47474
- [10.x] 修复 `exceptTables` 以允许表名数组,作者:@cwilby,https://github.com/laravel/framework/pull/47477
- [10.x] 修复 `HasManyThrough` 关系上的 `eachById`,作者:@cristiancalara,https://github.com/laravel/framework/pull/47479
- [10.x] 允许为自定义类转换器禁用对象缓存,作者:@CalebDW,https://github.com/laravel/framework/pull/47423
- [10.x] "Can" 验证规则,作者:@stevebauman,https://github.com/laravel/framework/pull/47371
- [10.x] 重构(Parser.php): 删除多余的 "else" 语句,作者:@saMahmoudzadeh,https://github.com/laravel/framework/pull/47483
- [10.x] 在 `ValidationServiceProvider` 中的 `provides()` 中添加 `UncompromisedVerifier::class`,作者:@xurshudyan,https://github.com/laravel/framework/pull/47500
- [10.x] 重新索引附加属性,作者:@hungthai1401,https://github.com/laravel/framework/pull/47519
- [10.x] 修复 `ListenerMakeCommand` 弃用,作者:@dammy001,https://github.com/laravel/framework/pull/47517
- [10.x] 添加 `HandlesPotentiallyTranslatedString` 特性,作者:@xurshudyan,https://github.com/laravel/framework/pull/47488
- [10.x] 更新 [JsonResponse]: 使用匹配表达式代替 if-elseif-else,作者:@saMahmoudzadeh,https://github.com/laravel/framework/pull/47524
- [10.x] 向 HTTP 客户端添加 `withQueryParameters`,作者:@mnapoli,https://github.com/laravel/framework/pull/47297
- [10.x] 允许组件属性名称中使用 `%` 符号,作者:@JayBizzle,https://github.com/laravel/framework/pull/47533
- [10.x] 修复 HTTP 客户端池返回值类型,作者:@srdante,https://github.com/laravel/framework/pull/47530
- [10.x] 在 `resolveSynchronousFake` 中使用 `match` 表达式,作者:@osbre,https://github.com/laravel/framework/pull/47540
- [10.x] 在 `compileHaving` 中使用 `match` 表达式,作者:@osbre,https://github.com/laravel/framework/pull/47548
- [10.x] 在 `getArrayableItems` 中使用 `match` 表达式,作者:@osbre,https://github.com/laravel/framework/pull/47549
- [10.x] 在
SessionGuard
中修复返回类型,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47553 中提交。 - [10.x] 在
DatabaseQueue
中修复返回类型,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47552 中提交。 - [10.x] 在
DumpCommand
中修复返回类型,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47556 中提交。 - [10.x] 在
MigrateMakeCommand
中修复返回类型,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47557 中提交。 - [10.x] 在
Factory
中添加缺失的返回,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47559 中提交。 - [10.x] 更新 Eloquent 模型中的文档,由 @alirezasalehizadeh 在 https://github.com/laravel/framework/pull/47562 中提交。
- [10.x] 修复返回类型,由 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/47561 中提交。
- [10.x] 修复 PHPDoc 抛出类型,由 @fernandokbs 在 https://github.com/laravel/framework/pull/47566 中提交。
- [10.x] 在 ComponentAttributeBag 中添加 hasAny 函数,在 has 函数中允许使用多个键,由 @indykoning 在 https://github.com/laravel/framework/pull/47569 中提交。
- [10.x] 确保捕获的时间在配置的时区中,由 @timacdonald 在 https://github.com/laravel/framework/pull/47567 中提交。
- [10.x] 添加方法来仅报告已记录的异常,由 @joelharkes 在 https://github.com/laravel/framework/pull/47554 中提交。
- [10.x] 在
Http
客户端中添加全局中间件,由 @timacdonald 在 https://github.com/laravel/framework/pull/47525 中提交。