Как добавить проверку уважения к дочернему объекту, которая является необязательной

#php #slim-3 #respect-validation

#php #slim-3 #проверка соблюдения

Вопрос:

В проверке уважения к Slim3 framework я пытаюсь добавить проверку к дочернему объекту.

 $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
);
  

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

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

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

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

PHP Фатальная ошибка: неперехваченный TypeError: аргумент 1, переданный в RespectValidationRulesOptional::__construct() должен реализовывать интерфейс RespectValidation Validatable, заданный null

Комментарии:

1. Вам необходимо передать экземпляр RespectValidationValidatable интерфейса при вызове Optional конструктора

Ответ №1:

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

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

Но затем набор ключей сработал для меня, когда я объединил его с когда

 $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
);