【问题标题】:How to get objects related to symfony validation errors如何获取与 symfony 验证错误相关的对象
【发布时间】:2018-05-30 17:17:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php symfony symfony4


    【解决方案1】:

    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
    }
    

    【讨论】:

    • 我跳过了一些关于我的问题的详细说明,但这也对我有帮助,谢谢!我正在处理关系,它有一个带有集合的属性。因此,当我验证父实体(不是相关集合中的每个实体)时,我无法通过违规将它们分开。我以另一种方式做到了 - 验证集合中的每个实体并填充 ViolationList 对象。之后我添加了自定义约束规范化器并从这些违规中获取了我的属性
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多