tzurbaev / laravel-extra-fields-validator
Laravel 的额外字段验证器。
Requires
- php: ^7.4|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mockery/mockery: ^1.2
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
描述
此包允许对随 HTTP 请求发送的额外(冗余)字段进行验证。
您只需创建一个新的 表单请求,通过扩展 Laravel\ExtraFieldsValidator\ExtraFormRequest 类(而不是 Illuminate\Foundation\Http\FormRequest)即可。
由于 ExtraFormRequest 扩展了原始的 FormRequest 类,因此您可以像使用常规表单请求一样使用此类。
在幕后,ExtraFormRequest 创建了一个自定义的 Validator 类实例(Laravel\ExtraFieldsValidator\Validator),允许注册和运行额外的回调(在验证成功后和验证失败后)。
在验证成功后,ExtraFormRequest 将尝试查找在 rules 列表中未描述但实际 HTTP 请求有效负载中存在的字段。
如果有,响应将以 HTTP 422 Unprocessable Entity 响应结束,并将自定义错误消息添加到错误包中(ExtraFormRequest::getExtraFieldErrorMessage(string $field): string)。
要求
此包需要 PHP 7.4 或更高版本。
安装
您可以通过 composer 安装此包
$ composer require tzurbaev/laravel-extra-fields-validator
您还可以发布包配置
php artisan vendor:publish --provider="Laravel\ExtraFieldsValidator\ExtraFieldsValidatorServiceProvider"
用法
假设您有以下请求
<?php namespace App\Http\Requests\Users; use Laravel\ExtraFieldsValidator\ExtraFormRequest; class StoreUserRequest extends ExtraFormRequest { public function authorize() { return true; } public function rules() { return [ 'first_name' => 'required|string|max:255', 'last_name' => 'required|string|max:255', 'age' => 'required|integer|min:0', ]; } }
如果实际 HTTP 请求有效负载中包含任何其他字段,验证将失败。
使用自定义验证器
如果您通过 FormRequest 的 validator 方法创建自定义验证器,则需要使用 parent::validator() 方法的返回值作为您的基验证器。
<?php namespace App\Http\Requests\Users; use Laravel\ExtraFieldsValidator\ExtraFormRequest; class StoreUserRequest extends ExtraFormRequest { public function authorize() { return true; } public function rules() { return [ 'first_name' => 'required|string|max:255', 'last_name' => 'required|string|max:255', 'age' => 'required|integer|min:0', ]; } public function validator() { $validator = parent::validator(); // Some custom logic. return $validator; } }
使用自定义表单请求
如果您正在使用自定义 FormRequest 类并且无法从 ExtraFormRequest 继承,则可以将 Laravel\ExtraFieldsValidator\ProvidesExtraFieldsValidator 特性包含到您的基/子类中。
错误消息
您需要将消息添加到您的 validation.php 语言文件(在 custom.extra_field 路径下)。额外的字段名称将作为 :attribute 替换传递。
您还可以覆盖 ExtraFormRequest::getExtraFieldErrorMessage 方法并返回任何自定义消息。
数据源
默认情况下,验证器使用 Laravel 的 FormRequest::validationData() 方法检索应该进行验证的数据。如果您有没有验证规则或路由可以接受可选查询参数的请求,这可能会导致意外的验证错误,因为可选查询参数可能未包含在您的 rules 数组中。
您有两个选项来处理此问题
- 在您的
rules方法中描述可选参数。这将不会破坏具有可选查询参数的请求,但如果存在任何其他未描述的参数,您将面临验证异常; - 将
extra-validator.data_source(或 ENV 变量EXTRA_VALIDATOR_DATA_SOURCE)的值从default更改为input_source。这将指示验证器仅使用 JSON/请求数据而不使用查询参数。
GET 请求
在大多数情况下,您不应在 GET 路由中使用 ExtraFormRequest。如果您确实需要它,请在您的 rules 方法中描述所有可用参数。
更新日志
有关最近更改的更多信息,请参阅 更新日志。
测试
$ composer test
贡献
有关详细信息,请参阅 贡献。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件zurbaev@gmail.com联系我们,而不是使用问题跟踪器。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。