0

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

在我的主表单中,我对“评论”字段进行了验证。这个验证很简单,效果很好。我的嵌入表单集合处理另一个实体。我想对此实体字段进行验证

|  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()

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

我错过了什么吗?

4

3 回答 3

0

"cascade_validation" => true在您的父表单中应该使嵌入的表单得到验证。

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

于 2013-09-23T11:22:27.883 回答
0

使用有效约束来验证作为属性嵌入到父对象上的对象

例如,如果使用注释

/**
*
* @Assert\Valid
*/
private $items;
于 2013-11-15T15:27:35.583 回答
0

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

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

在collection builder->add调用中:

   $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
        )
    );
}
于 2014-01-08T12:47:08.490 回答