如何在实体验证后获取错误信息。

8
我正在尝试在验证我的订阅实体后获得一个干净的错误信息:
/**
 * 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: 此值不得为空。(代码c1051bb4-d103-4f74-8988-acbcafc7fdc3)。

有什么办法可以清理它吗?

1个回答

17

试试这个:

$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 - Alessandro Minoccheri
2
谢谢,真的很有帮助。唯一可以补充的是删除json_encode - 这里会得到一个双重json_encode,导致无法使用的响应。返回新的JsonResponse($messages); - Edmunds22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接