Symfony验证可选的所有约束


Symfony validation optional all constraint

我如何在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,
    ]),
]);

但这并不能验证键是否存在。

只需验证headercontent项是数组:

$constraint = new Constraints'Collection([
    'frames' => new Constraints'Collection([
        'header' => new Constraints'Type('array'),
        'content' => new Constraints'Type('array'),
    ]),
]);