验证资源和规则。
Requires
- php: >=8.1
- ext-json: *
- ext-mbstring: *
- jitesoft/exceptions: ^2.4.2
Requires (Dev)
- fakerphp/faker: ^v1.20
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
README
用于验证各种值的包。
请注意,这是一个预发布版本,在第一个正式发布之前,可能对基础API进行更改,这可能会破坏任何实现。
如果在1.0.0版本之前使用验证包,请确保设置次要版本的约束,例如
"jitesoft/validator": "0.1.*"
用法
安装包
$> composer require jitesoft/validator
创建验证器时,需要在构造函数中设置可用的规则。这样,验证器就知道它可以使用哪些规则,并在需要时创建它们。
$validator = new Validator(
Email::class,
Text::class
);
有多种方式可以验证数据,以下片段都是有效的
使用单个规则的单个验证
$validator->validate('text', 'abc123');
使用深层规则的单个验证
$validator->validate(['text' => ['pattern' => '/?.*/' ], 'abc123');
索引数组中的多个规则和值
$validator->validate([
'text',
'number'
], [
'abc',
123
]);
具有索引数组值的多个深层规则
$validator->validate([
'text' => [
'pattern' => '/?.*/'
],
'number' => [
'max' => 200
]
], [
'abc',
123
]);
使用命名值的命名测试
$validator->validate([
'first' => [
'text' => [
'pattern' => '/?.*/'
]
],
'second' => 'number'
], [
'second' => 123,
'first' => 'abc123'
]);
索引数组上的命名测试。
$validator->validate([
'first' => [
'text' => [
'pattern' => '/?.*/'
]
],
'second' => 'number'
], [ 'abc', 123 ]);
返回值是一个布尔值,如果数据有效则为true,如果无效则为false。
如果为false,则 $validator->getErrors()
方法将返回验证测试的错误。
默认情况下,验证器不会抛出任何异常。但如果需要这样做,请将验证器构造函数的 $throw
参数设置为true,它将抛出 ValidationException
而不是返回false。
理念
验证结构的理念是,每个验证规则都可以有一组子规则。子规则反过来又可以有其他子规则。
在实现规则时,重要的是要确保验证器不会创建无限的自引用循环。
graph TD;
TextRule-- optional -->LengthRule
LengthRule-- optional -->MoreThanRule;
LengthRule-- optional -->LessThanRule;
TextRule-- optional -->PatternRule;
$validator->validate([
'Test' => [
'text' => [
'length' => [
'max' => 5,
'min' => 2
],
'pattern' => '/abc(\d{3})/s'
]
], 'abc123');
当验证器出错时,它应该从给定的规则中获取错误,并根据 throw
参数,要么将其存储在错误中,要么抛出验证异常。
当前实现的规则
以下是一个实现规则及其子规则关系的图。规则名称是实际名称,而不是类名称。请检查 src/Rules
目录以获取类名称。
graph TD;
boolean
text-->email
text-->length
text-->pattern
email-->length
email-->pattern
length-->max
length-->min
number-->min
number-->max
float-->min
float-->max
int-->min
int-->max
更改
0.1.0
验证调用
更新了验证函数调用。现在它将规则作为第一个参数,将值作为第二个参数。
规则可以是单个字符串,用于测试单个值,也可以是字符串数组,用于测试值数组,或者是一个关联数组,其中包含测试名称,它定义了规则并测试了一个值列表或匹配的关联数组。
错误
错误现在是关联数组,其中包含 'test name' 作为键,然后是每个规则及其错误作为键值对。
规则和错误都被扁平化了,所以深度总是相同的
$errors = [
'TestName1' => [
'text' => 'some error'
],
'TestName2' => [
'min' => 'Some error',
'max' => 'Some error',
'pattern' => 'Some other error.'
]
]
需要输入扁平化的数组。它应该扁平化还是为每个规则名称添加新的深度?
许可证
MIT。