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

fam*_*s23 5 php symfony symfony-2.1 symfony-3.2

我正在尝试在验证我的订阅实体后收到一条干净的错误消息:

/**
 * 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;
Run Code Online (Sandbox Code Playgroud)

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

   $validator = $this->get('validator');
   $errors = $validator->validate($email);
    if (count($errors) >0) {
    return new JsonResponse( (string)$errors);
      }
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*eri 9

试试这个:

           $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);
           }
Run Code Online (Sandbox Code Playgroud)

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

此代码可以与表单中的所有字段一起使用

  • 谢谢你 - 真的很有帮助.我唯一可以添加的是删除json_encode - 在这里你会得到一个双json_encode,留下一个不可用的响应.返回新的JsonResponse($ messages); (2认同)