这是我的代码
$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()
答案 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()
来获取消息之后。