hsnfirdaus/class-validator

使用PHP属性进行类验证

v2.0.4 2024-09-14 10:22 UTC

This package is auto-updated.

Last update: 2024-09-14 10:23:57 UTC


README

PHP类验证,使用php 8.0属性。

安装

使用Composer

composer require "hsnfirdaus/class-validator"

用法

示例用法

<?php

declare(strict_types=1);

namespace MyApp\Contract\User;

use Hsnfirdaus\ClassValidator\Attribute\IsEnum;
use Hsnfirdaus\ClassValidator\Attribute\IsNotEmpty;
use Hsnfirdaus\ClassValidator\Attribute\IsOptional;
use Hsnfirdaus\ClassValidator\Validator;
use MyApp\Entity\Enum\UserRole;
use MyApp\Entity\Enum\UserType;

class AddUserContract
{
    #[Name(name: 'User Type')]
    #[IsNotEmpty]
    #[IsEnum(enum: UserType::class)]
    public string $type = 'Can\'t be empty';

    #[IsNotEmpty]
    #[IsEnum(enum: UserRole::class)]
    public string $role = 'ValidEnumValue';

    #[IsOptional]
    public string $identifier;

    public function validate()
    {
        Validator::validate($this);
    }
}

然后调用验证方法,如果发现错误将抛出异常。目前此包仅支持属性属性。

可用属性

可用属性(见 src/Attribute 文件夹)

  • IsEmail() : 邮箱验证(使用php filter_var 函数)。
  • IsEnum(enum: ExampleEnum::class) : 从字符串值进行枚举验证。
  • IsInteger() : 整数验证(使用php is_int 函数)。
  • IsNotEmpty() : 验证去除空白符后的值不是空字符串或null。
  • IsNumeric(length?: number, minLength?: number, maxLength?: number) : 验证数字字符串(使用php is_numeric 函数)。
  • IsOptional() : 属性用于标记属性是可选的,允许未定义。
  • IsString(length?: number, minLength?: number, maxLength?: number) : 验证字符串长度。
  • Name(name: string) : 设置错误信息字段名(可选,默认将使用属性名)。
  • ValidateArrayClass(type: string) : 验证类的嵌套数组。
  • ValidateClass() : 验证嵌套类。

错误信息

目前仅支持英文和印尼语错误信息(见 locale)。默认为英文。

要更改区域设置,您可以在您的根或启动项目中使用setLang方法。

<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use Hsnfirdaus\ClassValidator\Validator;

Validator::setLang('id');

// Then you can call  Validator::validate method

或者,您可以使用setLangDir方法使用您自己的区域设置。例如,在__DIR__.'/locale/kr.php中创建您的区域设置文件,然后您可以使用

Validator::setLangDir(__DIR__.'/locale');
Validator::setLang('kr');