Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Frustrated to understand the error structure #139

Open
videni opened this issue Jan 5, 2022 · 1 comment
Open

Frustrated to understand the error structure #139

videni opened this issue Jan 5, 2022 · 1 comment

Comments

@videni
Copy link

videni commented Jan 5, 2022

Here is an error I got when I try to validate

JSON Data

{
    "name": "Slideshow",
    "tag": "section",
    "class": "slideshow",
    "max_blocks": 5,
    "settings": [
        {
            "id": "title",
            "type": "text",
            "label": "Slideshow"
        }
    ],
    "blocks": [
        {
            "name": "Slide",
            "type": "slide",
            "settings": [
                {
                    "type": "image_picker",
                    "id": "image",
                    "label": "Image"
                }
            ]
        }
    ]
}

JSON schema

{
    "$id": "/schemas/section",
    "type": "object",
    "properties": {
        "name": { "type": "string"},
        "tag": { "type": "string"},
        "class": { "type": "string"},
        "blocks": {
            "$ref": "file://block.json"
        },
        "settings": {
            "$ref": "file://settings.json"
        },
        "max_blocks": {
            "type": "integer"
        },
        "presets": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "blocks": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "type": {"type": "string"}
                            }
                        }
                    }
                }
            }
        },
        "default": {
            "type": "object",
            "properties": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "type": {"type": "string"}
                    }
                }
            }
        }
    },
    "required": ["name"]
}

The error I got.

No valid results for anyOf {
  0: No valid results for anyOf {
   0: Array expected, "id" received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[0]->properties:oneOf->items[5]:5->$ref:file://types/image_picker.json->properties:required at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[0]->properties:oneOf->items[5]:5
   1: Array expected, {"oneOf":[{"$ref":"file:\/\/types\/checkbox.json"},{"$ref":"file:\/\/types\/collection.json"},{"$ref":"file:\/\/types\/color_picker.json"},{"$ref":"file:\/\/types\/color.json"},{"$ref":"file:\/\/types\/header.json"},{"$ref":"file:\/\/types\/image_picker.json"},{"$ref":"file:\/\/types\/link_list.json"},{"$ref":"file:\/\/types\/product.json"},{"$ref":"file:\/\/types\/radio.json"},{"$ref":"file:\/\/types\/range.json"},{"$ref":"file:\/\/types\/richtext.json"},{"$ref":"file:\/\/types\/select.json"},{"$ref":"file:\/\/types\/text.json"},{"$ref":"file:\/\/types\/textarea.json"},{"$ref":"file:\/\/types\/url.json"},{"$ref":"file:\/\/types\/video_url.json"},{"$ref":"file:\/\/types\/video.json"}]} received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[1]
 } at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]
  1: Array expected, {"$ref":"file:\/\/block.json"} received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[1]
} at #->properties:properties->additionalProperties:blocks->properties:items

Can we bind the error to the JSON data instead of the JSON schema. I need to present the which property is missing, or invalid, our customer will be insane if we show the error above. Even me , unable to figure out what the JSON data is wrong from the error above. please let me know if this is possible please at the moment.

@dkd-kaehm
Copy link

dkd-kaehm commented Jan 27, 2022

@videni
may be $exception->getDataPointer() helps there?

try {
    $result = $schema->in(json_decode(file_get_contents($dataFile)));
} catch (InvalidValue $e) {
    return [
            "dataPointer" => $e->getDataPointer(),
            "schemaPointer" => $e->getSchemaPointer(),
            "Message" => $e->getMessage()
        ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants