0

在 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 致命错误:未捕获的 TypeError:参数 1 传递给 Respect\Validation\Rules\Optional::__construct() 必须实现接口 Respect\Validation\Validatable,给定 null

4

1 回答 1

0

我在下面尝试过

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

但是当KeySet与 when 结合使用时,它对我有用

$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
);
于 2019-04-10T02:00:23.477 回答