hunomina/data-validator

用于json schemas验证的库

4.4.0 2020-12-09 21:18 UTC

README

Build Status codecov

描述:基于数据schema的数据验证库

本项目遵循MIT许可协议。

接口和类

DataType

允许将数据封装成对象,并按格式化以便使用DataSchema进行验证。

JsonData

JsonData实现了DataType

JsonData::format()使用json_decode()将json字符串格式化为PHP数组。

DataRule

允许根据规则规范(数据是否可选?数据是否允许...)验证DataType

JsonRule

JsonRule实现了DataRule

JsonRule可以验证

DataSchema

DataSchema是库的主要类。它允许根据子schema和DataRule验证DataType

DataSchema::validate()方法允许进行此验证。如果DataSchema::validate()未验证DataType,则抛出InvalidDataException

JsonSchema

JsonSchema实现了DataSchema,并使用JsonRule验证JsonData

工作原理

请参阅测试以获取示例

JsonSchema有一个类型:objectlist

对象由规则和“子”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
    • 是可选的

当使用此模式通过调用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类型进行检查。