Symfony2验证来自内部表单类的唯一实体

时间:2014-08-26 10:28:25

标签: forms validation symfony unique-constraint

我认为问题很简单:

我需要在表单中使用唯一的值验证器,我可以通过执行以下操作来实现此目的:

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

/**
 * DataClass
 *
 * @ORM\Table(name="data_class", uniqueConstraints={@ORM\UniqueConstraint(columns={"gu"})})
 * @ORM\Entity
 * @UniqueEntity(
 *      fields={"gu"},
 *      ignoreNull=true
 * )
 */
class DataClass
{

/**
 * @var string
 *
 * @ORM\Column(name="gu", type="string", length=45, nullable=false, unique=true)
 * @Assert\NotBlank
 */
private $gu;    
...
}

但我真的不想避免在Entity中定义逻辑,而是在表单类中定义它(类似这样

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => '****\****\Entity\DataClass',
        'constrains' => array(
            new UniqueEntity(array(
                'fields' => array('gu')
            ))
        )
    ));
})

然而,这不起作用,所以我可以在表单类中使用此约束,如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:0)

为您的实体创建验证。您可以使用注释或验证文件。您必须将它们与类的属性相关联,而不是将约束与表单的字段相关联。

<强>资源/配置/ validation.yml:

****\**** \Entity\DataClass:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: gu
             ignoreNull: true