Как добавить Respect Validation для дочернего объекта, который является необязательным - PullRequest
0 голосов
/ 07 апреля 2019

В Respect Validation для фреймворка Slim3 я пытаюсь добавить проверку на дочерний объект.

$childObjValidationArr = array(
  'param1' => v::regex("/^[A-Za-z0-9]{1}[A-Za-z0-9.$#-@]{1,19}$/"),
  'param2' => v::date('Y-m-d'),
  'param3' => v::intVal()->not(v::negative())
);

Работает нормально, если дочерний объект не является обязательным.

$mainObjectValidators = array(
  'id' => $intPositive,
  'childObj' => $childObjValidationArr
);

Но не работаеткогда дочерний элемент является необязательным (допускается нулевое значение).

$mainObjectValidators = array(
  'id' => $intPositive,
  'childObj' => v::optional($childObjValidationArr)
);

Есть ли способ добавить дополнительную проверку для дочернего объекта с помощью Respect?

Ниже приведена ошибка при попытке выше

Неустранимая ошибка PHP: Uncaught TypeError: Аргумент 1 передан в Respect \ Validation \ Rules \ Optional :: __ construct () должен реализовывать интерфейс Respect \Валидация \ Допустимо, дано ноль

1 Ответ

0 голосов
/ 10 апреля 2019

Я попробовал ниже

$childObjectValidator = v::when(v::notOptional(), 
v::attribute('pCode', $codeRegex)
->attribute('pDate', v::date('Y-m-d'))
->attribute('pId', $intPositiveZeroAllowed));

Но тогда KeySet работал для меня, когда совмещал его с , когда

$pValidator = v::keySet(
  v::key('pCode', $codeRegex),
  v::key('pDate, v::date('Y-m-d')),
  v::key('pId', $intPositiveZeroAllowed)
);

$childObjectValidator = v::when(v::notOptional(), $pValidator, v::nullType());

и основной валидатор выглядит как показано ниже

$mainObjectValidators = array(
  'id' => $intPositive,
  'childObj' => $childObjectValidator
);
...