bonuscred/data-validator

数据验证和数据分组库

v1.1.2 2024-07-05 00:11 UTC

This package is auto-updated.

Last update: 2024-09-05 00:42:28 UTC


README

数据验证库。

安装

要通过 Composer 安装此依赖项。

composer require bonuscred/data-validator

使用

$data = [
    'field_cnpj'   => '81.287.353/0001-16',
    'field_cpf'    => '124.784.370-07',
    'field_int'    => 123,
    'field_string' => 'minhastring',
    'field_date'   => '2024-01-01 00:00:00'
];

$validator = new DataValidator\Validator;
$validator->cnpj('field_cnpj');
$validator->cpf('field_cpf');
$validator->integer('field_int');
$validator->string('field_string');
$validator->date('field_date', 'Y-m-d H:i:s');

$validator->validate($data); //true

直接属性验证

DataValidator\Field\Region\Cpf::isValid('124.784.370-07'); //true
DataValidator\Field\Array\Enum::isValid('a', ['b', 'c']); //false

处理异常

DataValidator\Validator 的默认行为是在找到无效数据后抛出异常,可以避免这种行为,并返回验证结果的布尔值。

//Evita disparo de Exception
DataValidator\Error::throw(false);

$data = [
    'field_cpf'    => 'not-a-cpf'
    'field_date'   => 'not-a-date'
];

$validator = new DataValidator\Validator;
$validator->cpf('field_cpf');
$validator->date('field_date');

if(!$validator->validate($data)){
    $errors = $validator->getErrors(); //Array contendo todos os erros de validação

    echo $validator->getLastError()->field; //field_date
    echo ': ';
    echo $validator->getLastError()->message; //Mensagem de data inválida
}

方法连接

可以连接 DataValidator\Validator 的所有验证方法。

(new DataValidator\Validator)->cnpj('field_cnpj')
                             ->cpf('field_cpf')
                             ->integer('field_int')
                             ->string('field_string')
                             ->date('field_date', 'Y-m-d H:i:s')
                             ->validate($data);

复杂结构

DataValidator 可以通过 DataValidator\Field\Array\Multidimensional 组件验证复杂的数据结构。

接收到的第二个参数是一个布尔值,用于指示结构是否指简单嵌套数组或对象数组("数组数组")。

它是递归的,因此可以在其他多维组件内部传递多维组件,创建复杂且非线性的数据结构。

$data = [
    'field_int' => 123,
    'complex'   => [
        'a' => 'not-empty',
        'b' => [
            'ba' => 1,
            'bb' => 'is-string',
        ],
        'c' => [
            [
                'ca' => 1,
                'cb' => 'cb_a'
            ],
            [
                'ca' => 2,
                'cb' => 'cb_b'
            ]
        ]
    ]
];


$validator = new DataValidator\Validator;
$validator->integer('field_int')
          ->multidimensional('complex', [
            'a' => new DataValidator\Field\Calculation\NotEmpty,
            'b' => [
                'ba' => new DataValidator\Field\Type\Integer,
                'bb' => new DataValidator\Field\Type\Stringval                
            ],
            'c' => new DataValidator\Field\Array\Multidimensional([
                'ca' => new DataValidator\Field\Type\Integer,
                'cb' => new DataValidator\Field\Array\Enum(['cb_a', 'cb_b'])
            ], true)
          ]);

$validator->validate($data); //true

条件验证

可以传递条件验证,其中只有当另一个验证匹配时才会考虑验证。

$validator->integer('field_int')
          ->addConditional(
            'field_int',
            new DataValidator\Field\Calculation\Equal(123), 
            'field_condicional', 
            new DataValidator\Field\Calculation\NotEmpty
         );

$validator->validate(['field_int' => 321]); //true
$validator->validate(['field_int' => 123]); //false

验证组件

否定

可以通过前缀 "not_" 获取否定验证。在这种情况下,如果字段具有真实验证,则将其反转为假。

$validator->integer('field_int')->validate(['field_int' => 123]); //true
$validator->not_integer('field_int')->validate(['field_int' => 123]); //false

翻译

目前组件提供葡萄牙语(pt-br)和英语(en)的错误消息,默认为 pt-br,可以根据需要进行更改。

DataValidator\Lang\Translator::set('en');

要求

  • PHP 8.0 或更高版本