如何在子对象上添加尊重验证(可选)

时间:2019-04-07 15:28:47

标签: php slim-3 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
);

但是当child为可选(不允许为空)时不起作用。

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

是否可以使用Respect为子对象添加可选验证?

下面是上面尝试的错误

  

PHP致命错误:未捕获的TypeError:参数1传递给   Respect \ Validation \ Rules \ Optional :: __ construct()必须实现   接口Respect \ Validation \ Validatable,给定null

1 个答案:

答案 0 :(得分:0)

我在下面尝试过

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