geraintluff / jsv4
PHP 的 (强制性的) JSON Schema v4 验证器
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
),因为在某些情况下,拥有一个公认的开放源代码许可协议是有好处的。