【问题标题】:Symfony2 - UniqueEntity no actionSymfony2 - UniqueEntity 没有动作
【发布时间】:2016-03-04 09:52:17
【问题描述】:

我有一个名为 Test 的实体,它有两个字段:id 和 name。 我希望这个名字是独一无二的。

我做了什么:

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

...

/**
 * Company\AppBundle\Entity\Test
 *
 * @ORM\Table(name="test")
 * @UniqueEntity("name")
 * @ORM\Entity(repositoryClass="Company\AppBundle\Entity\TestRepository")
 * 
 */
class Test
{

....

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

....

在我的控制器中,我正在使用:

if ($form->isValid()) {
   ....

但是验证通过了。我错过了什么吗?

【问题讨论】:

  • Test entity 是表单的主要实体,还是嵌入到您要验证的表单中?
  • @DonCallisto,测试实体是表单的主要实体!
  • 这是一个错字/** * @var integer $test * * @ORM\Column(name="test", type="string", length=200, nullable=false, unique=true) */ private $test; 吗?
  • 你能附加整个控制器动作和表单类型吗?谢谢

标签: validation symfony doctrine entity


【解决方案1】:

唯一的注释是针对教义的,它将它传递到数据库级别并从那里抛出错误。在您尝试保存实体之前,它不会知道实体存在。要在 php 中进行检查,您必须自己查询唯一属性并检查它是否存在...

【讨论】:

  • 嗨乔。我同意你的看法,但是在尝试添加重复值时,我得到了 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry "aaaa" for key "name"
  • 没错,错误是在数据库级别引发的,低于 php.ini 文件。如果要在引发实际错误之前进行检查,则必须进行手动查询。
  • 嗨乔,你确定吗?我认为唯一性查询是在执行 $form->isValid() 行时自动在内部进行的,Symfony“魔术”测试唯一性(检查我认为是否存在完整性违规)。所以我认为您不必手动执行该查询。
  • 我花了一年时间思考我是否确定,是的,我认为我确定。没有查询就不可能进行该检查,学说不会自动进行该查询。在首先查询之前,它无法在内部知道此键是否唯一..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
相关资源
最近更新 更多