qyanu / jsv4
PHP 的 JSON Schema v4 验证器
This package is not auto-updated.
Last update: 2020-08-16 11:36:57 UTC
README
PHP 的 JSON Schema v4 验证器
jsv4-php 是一个数据验证器,使用第 4 版 JSON 模式。
只需在代码中包含 jsv4.php,然后使用 Jsv4 类定义的静态方法。
用法
Jsv4::validate($data, $schema)
此用法返回一个具有以下形状的对象。
{
"valid": true/false,
"errors": [
{...}
]
}
errors 数组中的值类似于 tv4(类似的项目)中的值
{
"code": 0,
"message": "Invalid type: string",
"dataPath": "/intKey",
"schemaKey": "/properties/intKey/type"
}
code 属性对应于表示验证错误性质的常量,例如 JSV4_INVALID_TYPE。这些常量的名称(及其值)与 tv4 的常量 完全匹配。
Jsv4::isValid($data, $schema)
如果您只想知道验证状态,而不关心实际错误是什么,则这是一种更简洁的方法。
它返回一个布尔值,表示数据是否正确遵循了模式。
Jsv4::coerce($data, $schema)
有时,数据形状并不完全正确,但可以通过简单的修改来使其正确。
如果您调用 Jsv4::coerce($data, $schema),则它将尝试更改数据。
如果成功,则可以在 $result->value 中找到修改后的数据版本。
它不是占卜师 - 实际上,它的功能相当有限。它目前执行的操作是
标量类型类型强制转换
也许您正在使用来自 $_GET 的数据,所以一切都是字符串,但模式表示某些值应该是整数或布尔值。
Jsv4::coerce() 将尝试将字符串转换为数字/布尔值 仅当模式表示 时,其他数值字符串将保持为字符串。
缺少的属性
也许 API 需要一个完整的对象(使用模式中的 "required" 描述),但只提供了一个部分对象。
Jsv4::coerce() 将尝试为缺少的属性插入适当的值,使用默认值(如果它在附近的 "properties" 条目中定义)或创建一个值,如果它知道类型。
额外的属性
也许客户端向 API 发送了额外的垃圾数据,您希望立即过滤掉它们
如果 additionalProperties 设置为 false,则 Jsv4::coerce() 将删除对象中的任何未知属性。
SchemaStore 类
该类表示一组模式的集合。您从 schema-store.php 中包含它,并按如下方式使用:
$store = new SchemaStore(); $store->add($url, $schema); $retrieved = $store->get($url);
它可以处理:
- URL中的片段,使用JSON指针片段和
"id"标识 - 将
"id"和"$ref"中的URI转换为绝对URI(如果可能的话) - 解析
"$ref",将结果值拼接到模式中 - 将关联的PHP数组转换为对象 - 您可以本地表达您的模式,但从存储中检索的内容始终是对象。
- 根据其
"id"添加子模式 - 默认情况下,这仅在"id"是当前模式URL的子路径时才会发生。
如果正在添加的模式是“可信”的,则可以提供一个额外的参数:$store->add($url, $schema, TRUE)。在这种情况下,所有子模式的"id"值都被认为是始终可信的。
可以使用$store->missing()检索“缺失”的模式列表(未解析的"$ref")。
此类完全不依赖于jsv4.php - 它仅处理原始模式对象。因此,它(希望)可以与其他验证器配合使用,而无需过多麻烦。
测试
可以使用test.php运行测试(从命令行或通过网页)。
许可证
该代码在“公共领域”许可证下发布,您可以做任何您想做的事情(请参阅LICENSE.txt)。
它还发布在MIT风格的许可证下(请参阅LICENSE-MIT.txt),因为有时拥有一个公认的开放源代码许可证是有好处的。