Symfony UniqueEntity 验证消息

Posted

技术标签:

【中文标题】Symfony UniqueEntity 验证消息【英文标题】:Symfony UniqueEntity Validation Message 【发布时间】:2019-02-28 19:53:54 【问题描述】:

我在使用 UniqueEntity 时遇到了验证消息的问题。

这是我的代码:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;

/**
 * LaboratoryTestRequest
 *
 * @ORM\Table(name="laboratory_test_request")
 * @ORM\Entity(repositoryClass="...\...Bundle\Repository\...Repository")
 * @UniqueEntity(fields="num", message="It looks like the num is already use !")
 */
class MyClass

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

/**
 * @var string
 *
 * @ORM\Column(name="num", type="string", length=255, unique=true)
 */
 private $num;

问题是,当我提交带有已使用“num”的表单时,我没有唯一约束的“消息”。表单已提交,但出现此错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata ... for the 
key 'Uniq_80B6DC...'

我不明白为什么消息没有显示在表单中。也许我忘记了什么,但我不知道缺少什么,因为这就像文档。

感谢您的帮助。

编辑

我发现了问题所在。那是在控制器中。验证约束都不起作用。问题是这样的:

if($request->isMethod('POST') && $form->handleRequest($request)->isSubmitted())

...

在这段代码中,我不验证表单是否有效,我认为 isSubmitted 验证这一点,但事实并非如此。 所以,我目前找到的解决方案是添加这样的 isValid() 方法:

if($request->isMethod('POST') && $form->handleRequest($request)->isSubmitted())

...

像这样,我的表单中有错误消息。 只是有一个小问题,表单已提交,然后我回到表单并显示我想要的错误消息,并且没有任何内容保存在数据库中。

但如果可能的话,我希望在提交按钮上单击后直接显示错误消息。 因此,如果有人想分享其他解决方案或升级此解决方案,我会暂时打开这个话题。

【问题讨论】:

【参考方案1】:

你的树枝视图中有 form_errors(form) 吗?

【讨论】:

是的,因为我使用 form_row(form.num)

以上是关于Symfony UniqueEntity 验证消息的主要内容,如果未能解决你的问题,请参考以下文章

Symfony UniqueEntity vs UniqueConstraint vs unique=true

Symfony 验证器的注释返回“注释从未导入异常”

如何在加密字段上使用 UniqueEntity 约束?

@UniqueEntity 自定义消息未翻译

唯一实体消息

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