如何在Symfony 4中验证数组的数组

7
我希望知道如何在Symfony中验证数组的数组。 我的验证规则是:
  1. 用户-非空
  2. 日期-日期和非空
  3. 礼物-非空
到目前为止我已经做了这个:
$validator = Validation::createValidator();

$constraint = new Assert\Collection(array(
        'user' => new Assert\NotBlank(),
        'date' => new Assert\Date(),
        'present' => new Assert\NotBlank()
));

$violations = $validator->validate($request->request->get('absences')[0], $constraint);

但问题在于它只允许验证单个数组,例如:
$request->request->get('absences')[0]

以下是数组的样子:

enter image description here


可能是在Symfony表单类型中使用自定义约束/验证器的重复问题。 - Mike Doe
你在哪里看到了重复? - Martin
1个回答

18

你需要将Collection约束条件放在All约束条件中:

当应用于数组(或Traversable对象)时,此约束条件允许您对数组的每个元素应用一组约束条件。

因此,你的代码可能看起来像这样:

$constraint = new Assert\All(['constraints' => [
    new Assert\Collection([
        'user' => new Assert\NotBlank(),
        'date' => new Assert\Date(),
        'present' => new Assert\NotBlank()
    ])
]]);

更新:如果你想为此使用注释,它将看起来像这样:

@Assert\All(
    constraints={
        @Assert\Collection(
            fields={
                "user"=@Assert\NotBlank(),
                "date"=@Assert\Date(),
                "present"=@Assert\NotBlank()
            }
        )
    }
)

谢谢。我正在研究All断言,但没有想到我可以将集合传递到所有断言中。 - Martin
你好,你怎么用注解形式写这个? - reddy
嗨@reddy,抱歉,我刚看到你的问题。我已经更新了我的答案。 - Bartosz Zasada
如何验证是否存在“items > 0”? :) - Karol Gasienica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接