PHP 的 (强制性的) JSON Schema v4 验证器

v1.0.1 2014-10-07 13:36 UTC

This package is not auto-updated.

Last update: 2024-09-21 13:09:26 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" 条目中定义)或通过创建值来知道类型。

SchemaStore

此类表示一组模式。您可以从 schema-store.php 包含它,并按如下方式使用它

$store = new SchemaStore();
$store->add($url, $schema);
$retrieved = $store->get($url);

它可以处理

  • URL 中的片段,使用 JSON Pointer 片段和 "id" 的标识
  • "id""$ref" 中的 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),因为在某些情况下,拥有一个公认的开放源代码许可协议是有好处的。