php 实体验证后如何得到错误信息

o7jaxewo  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(115)

我尝试在验证订阅实体后获得一条清晰的错误消息:

/**
 * 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);
}

我收到此验证消息:
对象(AppBundle\实体\订阅)。电子邮件:此值不能为空。(代码c1051 bb 4-d103- 4f 74 -8988-acbcafc 7 fdc 3)。
知道怎么清理吗?

bfhwhh0e

bfhwhh0e1#

试试这个:

$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);
}

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

相关问题