表格嵌入验证

时间:2013-09-23 09:40:49

标签: symfony symfony-forms symfony-2.3

我有一个使用嵌入表单集合的表单。

在我的主要表单中,我对字段“评论”进行了验证。这个验证很简单,工作正常。 我的嵌入表单集合对待另一个实体。我想对此实体字段进行验证

|  comment (min length = 5 ok) ------
                                    |   anotherfield (min length = 5 not ok)    
                                    |   anotherfield (min length = 5 not ok) 

我通过validation.yml文件调用两个表单验证规则:

My\Bundle\Entity\Main:
    properties:
        comment:
            - Length: 
                min: 5
                minMessage: "minmessage"

My\Bundle\Entity\EmbedEntity:
    properties:
        anotherfield:
            - Length: 
                min: 5
                minMessage: "minmessage"

但是第二次验证被忽略了,我的表单被提交了。 (没有错误返回并通过$form is->valid()

我的验证文件已被阅读。 (我对评论的第一次验证很好)

我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

您父表单中的

"cascade_validation" => true应该验证嵌入的表单。

此外,我认为您可以在验证文件的嵌入字段中添加Valid以使其正常工作。

答案 1 :(得分:0)

使用Valid约束验证作为父对象的属性嵌入的对象

e.g。如果使用注释

/**
*
* @Assert\Valid
*/
private $items;

答案 2 :(得分:0)

将“error_bubbling”=> true添加到属性中,还会显示minMessages。 例如:

$builder->add('title', null, array('error_bubbling'=>true,"mapped" => true, "description" => "The title of the position"))

在集合构建器中 - >添加调用:

   $builder->add(
            'positionOwners',
            'collection',
            array(
                'type' => new PositionOwnerType($this->positionOwnerFormSubscriber),
                'allow_add' => true,
                'allow_delete' => true,
                'mapped' => true,
                'error_bubbling'=>true,
            'cascade_validation' => true
            )
        )

此外,setDefaultOptions应如下所示:

 /**
 * Set the default options of PositionType form
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(
        array(
            'data_class' => 'Radsphere\RecruitmentBundle\Entity\PositionType',
            'csrf_protection' => false,
            'cascade_validation' => true,
            'error_bubbling'=>true
        )
    );
}