我如何在All
约束中有Optional
约束。
基本上,我想验证一个键是否存在于一个数组中,它的值是一个可以包含空格或任何值的数组。
如果我省略Collection
约束中的键,我会得到错误:
This field was not expected
我知道我可以使用allowExtraFields
,但是我想验证键是否存在。
我想我会用:
$optional = new Constraints'Optional();
$all = new Constraints'All($optional);
但是结果是:
Fatal error: Class
'Symfony'Component'Validator'Constraints'OptionalValidator'
not found in
~'symfony'validator'Symfony'Component'Validator'ConstraintValidatorFactory.php
on line 36
下面是完整的代码:
use Symfony'Component'Validator'Validation;
use Symfony'Component'Validator'Constraints;
$input = [
'frames' => [
'header' => [
'test-header-1',
'test-header-2',
'',
],
'content' => [
'test-content-1',
'test-content-2',
'',
],
],
];
$optional = new Constraints'Optional();
$constraint = new Constraints'Collection([
'frames' => new Constraints'Collection([
'header' => new Constraints'All($optional),
'content' => new Constraints'All($optional),
]),
]);
$validator = Validation::createValidator();
$violations = $validator->validateValue($input, $constraint);
echo $violations;
我也试过:
$optional = new Constraints'Optional([
new Constraints'Type('array'),
]);
$constraint = new Constraints'Collection([
'frames' => new Constraints'Collection([
'header' => $optional,
'content' => $optional,
]),
]);
但这并不能验证键是否存在。
只需验证header
和content
项是数组:
$constraint = new Constraints'Collection([
'frames' => new Constraints'Collection([
'header' => new Constraints'Type('array'),
'content' => new Constraints'Type('array'),
]),
]);