实体验证后如何获取错误消息

Posted

技术标签:

【中文标题】实体验证后如何获取错误消息【英文标题】:How to get error message after entity validation 【发布时间】:2017-10-29 00:17:10 【问题描述】:

验证我的订阅实体后,我正试图获得一条干净的错误消息:

/**
 * Subscribe
 * @UniqueEntity("email")
 * @ORM\Table(name="subscribe")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\SubscribeRepository")
 */
class Subscribe

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     * @Assert\NotBlank()
     * @Assert\Email()
     * @ORM\Column(name="email", type="string", length=255, nullable=true, unique=true)
     */
    private $email;

调用验证器服务并使用空白电子邮件进行测试后:

   $validator = $this->get('validator');
   $errors = $validator->validate($email);
    if (count($errors) >0) 
    return new JsonResponse( (string)$errors);
      

我收到了这条消息Object(AppBundle\Entity\Subscribe).email: This value must not be empty. (code c1051bb4-d103-4f74-8988-acbcafc7fdc3)。 知道怎么清洗吗?

【问题讨论】:

【参考方案1】:

试试这个:

           $validator = $this->get('validator');
           $errors = $validator->validate($email);
           if (count($errors) >0) 
                $messages = [];
                foreach ($errors as $violation) 
                     $messages[$violation->getPropertyPath()][] = $violation->getMessage();
                
                return new JsonResponse($messages);
           

通过这种方式,我创建了一个错误数组,其中键是无效字段,您可以更改此逻辑并仅在错误前面添加字段名称并返回一个简单的字符串。

此代码适用于表单中的所有字段

【讨论】:

很高兴为您提供帮助! :D 谢谢,真的很有帮助。我唯一可以添加的是删除 json_encode - 在这里你会得到一个双 json_encode 留下一个不可用的响应。返回新的 JsonResponse( $messages );

以上是关于实体验证后如何获取错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 中使用从属性文件获取的错误消息的注释验证?

Rails - 从模型中获取不是验证错误的错误消息

验证电子邮件并注册用户后,如何在电子邮件上生成链接后获取令牌?

如何使用实体框架和 MySQL 获取每个组的最新记录,包括相关实体

如何在 ASP.NET MVC 中获取模型状态错误的集合?

如何在 laravel 5.5 中获取验证消息