beeralex/validator

一个用于各种值类型的数组的验证库。

dev-main 2024-07-22 11:37 UTC

This package is auto-updated.

Last update: 2024-09-23 04:07:42 UTC


README

这个库提供了一个简单的验证器实现。

安装

composer require beeralex/validator:dev-main

如何使用

要使用验证器,创建一个继承自 \Validator\Validator 的类,并实现一个 rules 方法,该方法描述验证规则。每条规则由 '|' 符号分隔。

protected function rules() : array
{
    return [
        'name' => 'required|string|min:2|max:30',
        'email' => 'email',
        'age' => 'nullable|integer',
    ];
}

自定义错误消息

您还可以使用 messages 方法为每条规则创建自定义错误消息

protected function messages(): array
{
    return [
        'name.required' => 'Имя обязательный параметр',
        'name.min' => 'Имя должно быть не короче 2 символов',
        'email.required' => 'Email обязательный параметр',
        'email.email' => 'Email должен быть валидным',
    ];
}

标准规则

  • array - 检查值是否为数组。
  • boolean - 检查值是否为布尔值。
  • email - 检查值是否为有效的电子邮件。
  • float - 检查值是否为浮点数(整数将返回 false)。
  • in - 在数组中查找值。如果值不是数组,则返回 false。
  • integer - 检查值是否为整数(字符串或浮点数将返回 false)。
  • max:{param} - 检查字符串长度是否大于或等于传递的参数。如果值不是字符串,则返回 false。
  • min:{param} - 检查字符串长度是否小于或等于传递的参数。如果值不是字符串,则返回 false。
  • nullable - 值可以为空。
  • numeric - 检查值是否为数字或数字字符串。
  • required - 值是必需的。如果字段同时是 required 和 nullable,则 nullable 会被忽略。
  • string - 检查值是否为字符串(空字符串也会返回 true)。

自定义规则

自定义规则应该继承自 Validator\Rules\Rule 类,并使用 userRules 方法添加它们,该方法需要在您的验证器类中重写,该方法应返回 Validator\RegistryCustomRules 类的对象。使用 addRule 方法并传入完整的类名。

protected function userRules() : ?RegistryUserRules
{
    return (new RegistryUserRules)->addRule(TestRule::class);
}

规则类名应以 Rule 结尾(TestRule),因此规则名称将形成为 test,类名中的 Rule 将被截断。或者,您可以重写静态方法 getRuleName,该方法应返回此规则的名称。

自定义规则名称必须是唯一的,且不能与标准规则冲突。现在,您可以使用 getRuleName 方法返回的名称在 rules 方法中形成规则。如果通过冒号传递参数,则您需要在您的规则类中实现自己的构造函数,并将值传递。

namespace Validator\Test;

class TestRule extends \Validator\Rules\Rule
{
    public function validate($value) : bool
    {
        return false;
    }
    public function getMessage(): string
    {
        return 'test сustom rule message';
    }
    public static function getRuleName() : string
    {
        return 'newTestRuleName';
    }
}

使用示例

要验证数组,请创建一个验证器类的实例。构造函数接受一个数组,其中的值将被检查。

$validator = new UserValidator([
    'name' => 'имя',
    'email' => 'email@email.com',
    'age' => 33,
]);

要验证,请使用 validate 方法,该方法返回一个布尔值。

$validator->validate();

要获取错误消息,请使用 errors 方法。

$validator->errors();

要获取未验证的值数组,请使用 validated 方法。

$validator->validated();
class UserValidator extends \Validator\Validator
{
    protected function rules() : array
    {
        return [
            'name' => 'required|string|min:2|max:30',
            'email' => 'email|newTestRuleName',
            'age' => 'nullable|integer',
        ];
    }

    protected function messages(): array
    {
        return [
            'name.required' => 'Имя обязательный параметр',
            'name.min' => 'Имя должно быть не короче 2 символов',
            'email.required' => 'Email обязательный параметр',
            'email.email' => 'Email должен быть валидным',
            'email.newTestRuleName' => 'Новое сообщение для newTestRuleName'
        ];
    }

    protected function userRules() : ? \Validator\RegistryUserRules
    {
        return (new \Validator\RegistryUserRules)->addRule(TestRule::class);
    }
}