在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给定
我试过下面的
$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
);