Схема JSON: обязательные свойства игнорируются

Я обнаружил, что JSON Schema сегодня на 100% соответствует моим потребностям, но на самом деле это сводит меня с ума в одном из самых простых случаев. Перед созданием этого поста я, очевидно, приложил все усилия, чтобы следовать существующей документации и искал в интернете, пытаясь найти что-то полезное.

Стек: PHP7 — justinrainbow / json-схема 2.0.5

Вот схема:

{
"description":"UserCreate",
"type":"object",
"properties":{
"login":{
"type":"string",
"required":true
},
"idAsc":{
"type":"string",
"required":true
}
},
"required":[
"login",
"idAsc"]
}

Как видите, я использую оба обязательных определения (логическое и массивное), просто чтобы убедиться, что я использую правильное определение, я также попытался использовать только массив и / или логическое значение с тем же результатом.

Вот данные

{
"login":"[email protected]"}

Я ожидаю, что следующий код обнаружит отсутствие обязательного параметра idAsc.

$validator = new JsonSchema\Validator;
$validator->check($data, $schema);
if ($validator->isValid() == false)
echo("Missing something");
else
echo("Good");

Но этот код продолжает печатать «Хорошо»… Я определенно что-то упускаю в JSON Schema.

Спасибо за вашу помощь, с наилучшими пожеланиями.

1

Решение

Я наконец заставил это работать, после отладки шаг за шагом реализация схемы JSON, которую я использовал:

Прежде всего, я сам загрузил схему JSON, пример, приведенный в репозитории Github, выглядит для меня неработоспособным (https://github.com/justinrainbow/json-schema):

$data = json_decode(file_get_contents('data.json'));

// Validate
$validator = new JsonSchema\Validator;
$validator->check($data, (object)['$ref' => 'file://' . realpath('schema.json')]);

Я не смог найти ни одного вызова file_get_contents или родственников внутри библиотеки во время моей пошаговой отладки. По этой причине я решил загрузить схему самостоятельно, а не указывать путь к ней:

function getSchema($filePath) {
// NOT WORKING -> return json_decode(file_get_contents($filePath), true);
return json_decode(file_get_contents($filePath));
}

$data = json_decode($rest->getRequest()->getBody());
$schema = $this->getSchema(realpath('controllers/schemas/userCreate.json'));

$validator = new JsonSchema\Validator;
$check_return = $validator->check($data, $schema);

Обратите внимание на закомментированную строку в функции getSchema, если вы используете json_decode со значением true в качестве второго параметра, это тоже не сработает, схема должна быть объектом, а не массивом!

Теперь все работает как шарм для меня;)

С наилучшими пожеланиями,

2

Другие решения

Кажется, это проблема используемой вами реализации валидатора. Эта проверка должна провалиться. Вы можете попробовать это с другими реализациями.

0

По вопросам рекламы [email protected]