我有一个实体,在保存到我的控制器之前我会对其进行验证。
/** @var ConstraintViolationList $errors */
$errors = $this->validator->validate($entity);
因此,当验证失败时,我将获得ConstraintViolation
个对象的列表。
如何检索这些错误的相关对象?我的目标是将映射的错误返回给每个实体(这将突出显示前端的无效元素)。
我将使用来自object而不是id的自定义字段 - 所有对象在保存到db之前都有它,因此前端可以区分它们。 我想我应该编写自己的约束规范化器,但它不知道有关错误的相关对象。
答案 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
}