tzurbaev/laravel-extra-fields-validator

Laravel 的额外字段验证器。

1.0.4 2021-07-08 11:33 UTC

This package is auto-updated.

Last update: 2024-09-08 18:17:08 UTC


README

GitHub Workflow Status StyleCI ScrutinizerCI Latest Version on Packagist Software License

描述

此包允许对随 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 请求有效负载中包含任何其他字段,验证将失败。

使用自定义验证器

如果您通过 FormRequestvalidator 方法创建自定义验证器,则需要使用 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 数组中。

您有两个选项来处理此问题

  1. 在您的 rules 方法中描述可选参数。这将不会破坏具有可选查询参数的请求,但如果存在任何其他未描述的参数,您将面临验证异常;
  2. extra-validator.data_source(或 ENV 变量 EXTRA_VALIDATOR_DATA_SOURCE)的值从 default 更改为 input_source。这将指示验证器仅使用 JSON/请求数据而不使用查询参数。

GET 请求

在大多数情况下,您不应在 GET 路由中使用 ExtraFormRequest。如果您确实需要它,请在您的 rules 方法中描述所有可用参数。

更新日志

有关最近更改的更多信息,请参阅 更新日志

测试

$ composer test

贡献

有关详细信息,请参阅 贡献

安全性

如果您发现任何与安全相关的问题,请通过电子邮件zurbaev@gmail.com联系我们,而不是使用问题跟踪器。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件