在我的表单中,我有entity
类型的字段。如何在提交表单时禁用该实体的验证?该实体已经存在于数据库中,因此验证者无需从我的角度验证此实体。
修改
代码如下所示:
class SearchRequest
{
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank
*/
private $articlePattern;
}
表单字段:
$builder
->add('articlePattern', 'entity', array('class' => 'LonbitItssBundle:ArticlePattern')
验证组不起作用,因为我想要完成的是验证器检查@Assert\NotBlank
字段上的约束$articlePattern
,但我不希望他检查类ArticlePattern中定义的约束。换句话说,我希望阻止验证器在$ articlePattern对象中降序,但我希望验证$ articlePattern字段本身的约束。
知道怎么做吗?
EDIT2:
验证组可以使用。因此,最终的解决方案是将groups={"search_request"}
约束选项(组的名称是任意的)添加到SearchRequest类中的每个字段断言,如下所示:
/**
* @Assert\NotBlank(groups={"search_request"})
*/
private $articlePattern;
这样,验证不会下降到关联对象(假设它们不属于 - 在这种情况下 - “search_request”组)。
答案 0 :(得分:4)
1)如果您要禁用此字段,请不要在您的班级表单中使用它! (并将其从模板中删除)
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('content')
->add('username')
//->add('yourEntity')
;
}
2)或者更好,请使用validation groups。您创建一个不调用验证器实体的validation_group,然后在您的类表单中使用该组:
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest',
'csrf_protection' => true,
'csrf_field_name' => '_token',
'intention' => '865c0c0b4ab0e063e5caa3387c1a8741',
'validation_groups' => array('without_article_pattern_ckecking'),
);
}
在您的实体类中:
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank(
* groups={"without_article_pattern_ckecking"}
* )
*/
private $articlePattern;
您的表单只会验证引用without_article_pattern_ckecking组的验证器,因此如果它们没有此验证组,则不应在ArticlePattern实体内测试验证器。
我希望这可以帮到你!