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已经被导入了。我没有任何验证组。