加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在JustinRainbow JsonValidator中使用引用

发布时间:2020-12-13 22:26:47 所属栏目:PHP教程 来源:网络整理
导读:有人能告诉我如何使JustinRainbow Json模式验证器能够找到参考. 这是我想要验证的foobar的架构: { "title": "foobar schema","type": "object","properties": { "pagination": { "$ref": "#/definitions/pagination" } },"required": ["pagination"]} 分页
有人能告诉我如何使JustinRainbow Json模式验证器能够找到参考.

这是我想要验证的foobar的架构:

{
  "title": "foobar schema","type": "object","properties": {
    "pagination": {
       "$ref": "#/definitions/pagination"
    }
  },"required": ["pagination"]
}

分页模式的定义包含在我的计算机上的单独文件中.

尝试验证这一点,而不告诉JSON验证器如何解析这样的引用:

$uriRetriever = new JsonSchemaUriUriRetriever();
$refResolver = new JsonSchemaRefResolver($uriRetriever,$uriResolver);
$schema = $refResolver->resolve("file://".realpath(__DIR__."/foobar.json"));

给出错误消息:

File: file://features/foobar.json is found,but could not resolve fragment: #/definitions/pagination (JsonSchemaExceptionUnresolvableJsonPointerException)

这是公平的,因为验证器无法知道如何找到包含分页模式定义的文件….那么如何告诉RefResolver如何找到分页模式的定义?

我宁愿能够通过本地文件系统解析文件,而不必在网络服务器上使用URL.

解决方法

架构中使用的引用类型是 json pointer,指的是架构文件的另一部分.您需要指定定义/分页属性以消除错误.

{
  "title": "foobar schema","required": ["pagination"],"definitions": {
        "pagination": {

        }
    }
}

为了引用其他文件中的定义,您可以编写如下内容:

"pagination": {
  "$ref": "pagination.schema.json#"
}

甚至可以在外部文件中指定特定节点:

"pagination": {
  "$ref": "external_definitions.schema.json#/definitions/pagination"
}

应在与包含引用的架构相同的文件夹中查找external_definitions.schema.json / pagination.schema.json.该库还应提供一些api来配置此查找.

在我的项目中,我使用JustinRainbow JsonValidator for php.它不允许提供自定义解析程序,但引用文件搜索的位置可能受架构中“id”值的影响.

示例,main.schema.json中的模式:

{
  "id": "http://myweb.com/schemas/main.schema.json#","title": "foobar schema","properties": {
    "pagination": {
       "$ref": "pagination.schema.json#"
    }
  },"required": ["pagination"]
}

验证此架构时,验证程序尝试使用以下命令加载pagination.schema.json:

php_get_contents('http://myweb.com/schemas/pagination.schema.json');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读