andrey-vasin/laravel-request-filters

为 Laravel 5.6+ 提供简单 & 精简的请求过滤

V1.3 2022-05-11 11:58 UTC

This package is not auto-updated.

Last update: 2024-09-26 22:20:21 UTC


README

Software License

关于

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
);

许可证

MIT