1

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,
    ]),
]);

しかし、それはキーが存在することを検証しません。

4

1 に答える 1

0

headerおよびcontent項目が配列であることを検証するだけです。

$constraint = new Constraints\Collection([
    'frames' => new Constraints\Collection([
        'header' => new Constraints\Type('array'),
        'content' => new Constraints\Type('array'),
    ]),
]);
于 2013-06-11T22:06:21.140 に答える