Forms 为什么我的约束验证在表单生成器上声明时有效,但在实体上配置时被忽略?
我有一个Forms 为什么我的约束验证在表单生成器上声明时有效,但在实体上配置时被忽略?,forms,validation,symfony,Forms,Validation,Symfony,我有一个ProjetContact实体,该实体具有角色关系。ProjetContact实体必须至少具有一个角色。所以我添加了一个计数约束作为注释 /** * @var Collection * * @Assert\Count(min=1, minMessage="Vous devez sélectionner au moins un rôle par contact") * * @ORM\ManyToMany(targetEntity="ContactRole") * @ORM\
ProjetContact
实体,该实体具有角色
关系。ProjetContact实体必须至少具有一个角色。所以我添加了一个计数约束作为注释
/**
* @var Collection
*
* @Assert\Count(min=1, minMessage="Vous devez sélectionner au moins un rôle par contact")
*
* @ORM\ManyToMany(targetEntity="ContactRole")
* @ORM\JoinTable(
* name="projet_contact_role",
* joinColumns={
* @ORM\JoinColumn(name="projet_contact_role_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="role_id", referencedColumnName="id")
* }
* )
*/
private $roles;
但是,这不起作用,约束被忽略。用户无需选择任何角色即可提交表单
我发现,如果我在表单生成器上配置验证器,它就会工作
$builder
->add('roles', 'entity', array(
'label' => 'Rôles',
'class' => 'MyIntranetBundle:ContactRole',
[...]
'constraints' => new Count(
array('min'=>1, 'minMessage'=>'Vous devez sélectionner au moins un rôle par contact')
)
))
->[...]
我更喜欢直接在实体上配置验证器。为什么这样不行?两个可能的原因:
Assert
(应该是使用Symfony\Component\Validator\Constraints作为Assert;
)Default
group我必须在使用
ProjetContact
的父实体上添加@Assert\Valid()
/**
* @var Collection
*
* @Assert\Valid()
*
* @ORM\OneToMany(targetEntity="ProjetContact", mappedBy="projet", cascade={"persist","remove"})
*/
private $contacts;
我的帖子中没有包含import部分,但是Assert已经被导入了。我没有任何验证组。