如何获取与symfony验证错误相关的对象

时间:2018-05-30 17:17:30

标签: php symfony symfony4

我有一个实体,在保存到我的控制器之前我会对其进行验证。

/** @var ConstraintViolationList $errors */
    $errors = $this->validator->validate($entity);

因此,当验证失败时,我将获得ConstraintViolation个对象的列表。 如何检索这些错误的相关对象?我的目标是将映射的错误返回给每个实体(这将突出显示前端的无效元素)。

我将使用来自object而不是id的自定义字段 - 所有对象在保存到db之前都有它,因此前端可以区分它们。 我想我应该编写自己的约束规范化器,但它不知道有关错误的相关对象。

1 个答案:

答案 0 :(得分:2)

ConstraintViolationList的行为类似于ConstraintViolationInterface实现的迭代器。从每个ConstraintViolationInterface对象,您可以调用getPropertyPath方法,该方法为您提供根数据的无效元素的属性路径(可以使用getRoot方法从任何ConstraintViolationInterface检索根数据实施。

use Symfony\Component\PropertyAccess\PropertyAccess;

// ...

foreach ($errors as $error) {
    $invalidElementAccessor = PropertyAccess::createPropertyAccessor();
    $invalidElement = $invalidElementAccessor->getValue($error->getRoot(), $error->getPropertyPath());

    // Do something with element
}