andrey-vasin / laravel-request-filters
为 Laravel 5.6+ 提供简单 & 精简的请求过滤
V1.3
2022-05-11 11:58 UTC
Requires
- php: >=5.6
- illuminate/contracts: *
- illuminate/support: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-26 22:20:21 UTC
README
关于
Laravel 提供了验证 HTTP 请求的工具,允许开发者确保输入数据符合正确的结构。
此包提供了将有效数据过滤到预期格式的工具。
它感觉像是 Laravel 框架的一部分,使用起来非常简单。
要求
Laravel 5.6+
特性
- 使用一系列预制的和经过测试的过滤器来格式化输入
FilterRequests
特性,可以轻松地插入到FormRequest
中以启用过滤InputFilter
允许开发者轻松实现自己的过滤器RequestFiltering
工具,可以将相同的过滤器应用于您传入的任何字符串- 嵌套 AND 数组过滤,就像 Laravel 自己的验证器一样 👌
- 基于字符串的过滤,类似于 Laravel 的验证器 + 自定义可解析的过滤器
包含的过滤器
包含的过滤器(作为字符串字面量)
您可以通过实现 FilterInterface
来创建自己的自定义过滤器 :)
如何使用
通过 composer 导入
composer require andrey-vasin/laravel-request-filters
在您的 FormRequest 中使用以下特性
use AndreyVasin\RequestFilters\FilterRequests
描述您的过滤器(包含 Laravel 规则以供熟悉)
public function rules():array { return [ 'email' => ['required', 'email', 'bail'], 'name' => ['required'], 'employees.*.name' =>['required'] ]; }
public function filters():array { return [ 'email' => [new FilterTrim, new FilterSanitizeEmail], 'name' => [new FilterTrim, new FilterSanitizeText, new FilterCapitalize], 'employees.*.name' => [new FilterCapitalize], 'date' => [new FilterTrim, new FilterDate('d/m/Y')] ]; }
或者使用基于字符串的语法
public function filters():array { return [ 'email' => 'trim|email', 'name' => 'trim|sanitize|capitalize', 'employees.*.name' => 'capitalize', 'date' => 'trim|date:d/m/Y' ]; }
按照正常方式验证请求,但现在结果将经过过滤 :)
$input = $request->validated(); echo $input['email']; //trimmed and sanitized email!
您可以选择仅对请求之外的任何字符串运行过滤器
$validated_input = $request->validate([...]); $filtered_result = InputFilter::filter( $validated_input, [ 'email' => [new FilterTrim], 'name' => [new FilterTrim], 'meta.*.attributes' => [new MyCustom1Filter(1), new MyCustom2Filter(2)] ] );
使用您自己的自定义过滤规则到字符串解析语法很容易!
$validated_input = $request->validate([...]); $custom_filters = [ 'custom1' => MyCustom1Filter::class, 'custom2' => MyCustom2Filter::class ]; $filtered_result = InputFilter::filterFromString( $validated_input, [ 'email' => 'trim', 'name' => 'trim', 'meta.*.attributes' => 'custom1:1|custom2:2' ], $custom_filters );