如何在子对象上添加Respect Validation,它是Optional

问题描述 投票:0回答:1

在Slim3框架的Respect Validation中,我试图在子对象上添加验证。

$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是可选的时不起作用(允许null)。

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

有没有为Respect的子对象添加可选验证的方法?

以下是上述尝试时的错误

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

php slim-3 respect-validation
1个回答
0
投票

我试过下面的

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

但是当KeySet与when结合使用时,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
);
© www.soinside.com 2019 - 2024. All rights reserved.