Symfony2中的实体表单字段和验证?

时间:2012-01-24 14:42:19

标签: symfony doctrine-orm

在我的表单中,我有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”组)。

1 个答案:

答案 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实体内测试验证器。

我希望这可以帮到你!