qyanu/jsv4

该软件包已被废弃,不再维护。没有建议的替代软件包。

PHP 的 JSON Schema v4 验证器

维护者

详细信息

github.com/qyanu/jsv4-php

源代码

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

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),因为有时拥有一个公认的开放源代码许可证是有好处的。