如何从$ violations获取数组键=> errorMessage。 Symfony 4

时间:2019-01-16 13:06:08

标签: php symfony

这是我的代码

 $arParams = $request->all();

    $validator = Validation::createValidator();

    $groups = new GroupSequence(['Default', 'custom']);

    $constraint = new Assert\Collection([
        'name' => new Assert\Length(['min' => 2]),
        'city' => new Assert\Length(['min' => 2]),
        'email' => new Assert\Email(),
        'phone' => new Assert\Length(['min' => 18]),
        'message' => new Assert\NotNull()
    ]);

    $violations = $validator->validate($arParams, $constraint, $groups);

如果遇到一些错误,如何获取类似的数组 ['名称'=>符号不足,'电子邮件'=>错误的电子邮件]?

我试图在$ violations上使用foreach,但找不到其元素Phpstorm将$ violation混合在一起的所有方法。我发现只有$ violation-> getMessage()和-> getCode()

1 个答案:

答案 0 :(得分:0)

我建议您阅读本文https://symfony.com/doc/current/validation.html

如果验证失败,则返回非空错误列表(类ConstraintViolationList)。

因此您可以通过以下方式获取列表:

if ($violations->count() > 0) {
    $formatedViolationList = [];
        for ($i = 0; $i < $violations->count(); $i++) {
            $violation = $violations->get($i);
            $formatedViolationList[] = array($violation->getPropertyPath() => $violation->getMessage());
        }
}

夫妇的解释。我们使用违反API count()的方法或获取许多违反,在for循环之后,我们使用get($i)来获取每个违反索引的索引。在我们使用getPropertyPath()来获取路径(财产的名称)并使用getMessage()来获取消息之后。