hunomina / data-validator
用于json schemas验证的库
Requires
- php: ^7.4|^8.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-08 13:14:48 UTC
README
描述:基于数据schema的数据验证库
本项目遵循MIT许可协议。
接口和类
DataType
允许将数据封装成对象,并按格式化以便使用DataSchema进行验证。
JsonData
JsonData::format()
使用json_decode()
将json字符串格式化为PHP数组。
DataRule
允许根据规则规范(数据是否可选?数据是否允许...)验证DataType。
JsonRule
JsonRule可以验证
DataSchema
DataSchema是库的主要类。它允许根据子schema和DataRule验证DataType。
DataSchema::validate()
方法允许进行此验证。如果DataSchema::validate()
未验证DataType,则抛出InvalidDataException。
JsonSchema
JsonSchema实现了DataSchema,并使用JsonRule验证JsonData。
工作原理
请参阅测试以获取示例
JsonSchema有一个类型:object
或list
。
对象由规则和“子”schema(如有必要)组成。
这是schema定义
use hunomina\Validator\Json\Schema\Json\JsonSchema; $schema = new JsonSchema([ 'success' => ['type' => 'bool'], 'error' => ['type' => 'string', 'null' => true], 'user' => ['type' => 'object', 'null' => true, 'optional' => true, 'schema' => [ 'name' => ['type' => 'string'], 'age' => ['type' => 'int'] ]] ]);
schema只是传递给JsonSchema::setSchema()
方法的PHP数组。
此schema由3个元素组成
-
一个名为
success
的规则,它是- 一个布尔值
- 不能为null
- 不是可选的
-
一个名为
error
的规则,它是- 一个字符串
- 可以是null
- 不是可选的
-
一个“子”schema
user
,它是- 是一个对象,因此由一个包含2个元素的模式表示:一个
name
(字符串)和一个age
(整数) - 可以是null
- 是可选的
- 是一个对象,因此由一个包含2个元素的模式表示:一个
当使用此模式通过调用JsonSchema::validate()
方法验证数据单元时,该模式将递归检查数据是否遵守规则和“子”模式。
如果数据有
- 一个布尔元素
success
- 一个null或字符串元素
error
- 一个可选的,null或对象元素
user
,它必须有一个- 一个字符串元素
name
- 一个整数元素
age
- 一个字符串元素
此数据是有效的
use hunomina\Validator\Json\Data\Json\JsonData; $data = new JsonData([ 'success' => true, 'error' => null, 'user' => [ 'name' => 'test', 'age' => 10 ] ]);
这个不是
use hunomina\Validator\Json\Data\Json\JsonData; $data = new JsonData([ 'success' => true, 'error' => null, 'user' => 'test' ]);
如前所述,规则可以用来验证长度或数据模式。
此模式对name
元素使用模式验证,对geolocation
元素使用长度验证
use hunomina\Validator\Json\Schema\Json\JsonSchema; $schema = new JsonSchema([ 'name' => ['type' => 'string', 'pattern' => '/^[a-z]+$/'], 'geolocation' => ['type' => 'integer-list', 'length' => 2] ]);
调用JsonSchema::validate()
方法时,该模式将递归检查所有规则集和“子”模式。如果一个规则或一个“子”模式无效,则JsonSchema::validate()
返回false
。
“第一级”模式是一个object
类型模式。它可以更改,但不是这个意思。
最后,如果一个“子”模式被标记为object
类型,该模式将按照上述方式验证它。如果它被标记为list
类型,该模式将简单地使用给定的“子”模式将数据中的每个元素作为object
类型进行检查。