denarx/laravel-custom-validator

扩展默认的 Laravel 验证器,使规则更加严格

dev-master 2023-01-24 07:07 UTC

This package is auto-updated.

Last update: 2024-09-24 10:38:37 UTC


README

默认的 Illuminate 验证器存在一些错误和功能。此包使其更加严格,并允许您轻松扩展它,而无需创建自定义 Factory 和 ServiceProvider,这使得更改内置规则的行为成为可能

安装

composer require show4me/laravel-custom-validator

对于 Lumen:将其添加到您的 bootstrap/app.php

$app->register(Denarx\LaravelCustomValidator\ValidationServiceProvider::class);

默认修复了以下问题

  • integer - 现在接受 bool true 作为 1,现在抛出错误
  • 非必需的 integer - 现在接受空字符串和 null,现在抛出错误
  • 非必需的 string - 不检查最小长度,仅跳过,现在抛出错误

在您的应用程序中覆盖/扩展

您可以通过创建文件 /app/Validator/Validator.php 来简单地扩展以添加/更改规则

<?php

namespace App\Validator;

use Denarx\LaravelCustomValidator\Validator as CustomValidator;

class Validator extends CustomValidator
{
    public function validateNewRule($attribute, $value): bool
    {
        return $value==='test';
    }

    public function validateInteger($attribute, $value): bool
    {
        return !is_string($value) && is_numeric($value) && filter_var($value, FILTER_VALIDATE_INT) !== false;
    }
}

在此示例中,默认规则 "integer" 被覆盖以实现更严格的行为,数值字符串(如 "1")将被拒绝。我们添加了名为 "new_rule" 的新规则,该规则仅接受字符串 'test'。在拒绝时,我们将获得错误消息:"Error while validation"。要自定义它,我们需要创建文件 /resources/lang/en/validation.php

<?php

$defaultTranslation = include(base_path('/vendor/laravel/lumen-framework/resources/lang/en/validation.php'));
$customTranslation = [
    'new_rule' => 'The :attribute must be equal "test".',
];

return array_merge($defaultTranslation, $customTranslation);

现在我们有了消息:"标题必须等于 "test"."

您可以通过创建相同的文件 /app/Validator/Validator.php 但将其扩展为 DefaultValidator 而不是 CustomValidator 来仅使用扩展而不更改默认规则的行为。在这种情况下,验证器具有默认的 Illuminate 行为,但您仍然可以轻松扩展它。

<?php

namespace App\Validator;

use Illuminate\Validation\Validator as DefaultValidator;

class Validator extends DefaultValidator
{
    public function validateNewRule($attribute, $value): bool
    {
        return $value==='test';
    }
}