Symfony验证可选所有约束

时间:2013-06-11 22:06:21

标签: php validation symfony

如何在Optional约束内有All约束。

基本上我想验证数组中是否存在一个键,它的值是一个可以包含空格或任何值的数组。

如果我省略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,
    ]),
]);

但是那不会验证密钥是否存在。

1 个答案:

答案 0 :(得分:0)

只需验证headercontent项是否为数组:

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