表单集合错误冒泡

时间:2013-03-25 17:47:12

标签: forms symfony collections

您好我的表单中的文本字段集合存在问题。当其中一个字段中存在错误时,这些错误会冒泡到父表单中,因此它们不会分配给字段,而是分配给父本身。它是以下代码段中的“点”集合。我试图将error_bubbling设置为false,但它没有任何效果。

    <?php
    namespace JamaLvova\AdminBundle\Form\Type;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    use JamaLvova\AdminBundle\Form\Type\ExercisePointsFormType;

    class StartContestFormType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {

            $builder->add('startYear', 'hidden')
                   /*
                       some other form elements
                   */
                    ->add('points', 'collection', array(
                        'type' => 'text',
                        'allow_add' => true,
                        'label' => 'Body za jednotlivé úlohy:',
                        'error_bubbling' => false,
                        'options' => array(
                            'error_bubbling' => false,
                            'attr' => array("maxlength" => "4", "size" => "4")
                        )
                        ));
        }

        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'JamaLvova\AdminBundle\Form\StartContestForm',
            ));
        }

        public function getName()
        {
            return 'startContestForm';
        }
    }

在StartContestForm中,我有$ points属性,如下所示:

     /**
     * @Assert\Type(type="integer", message="Hodnota {{ value }} není celé číslo.")
     * @Assert\Range(
     *      min = "0",
     *      max = "",
     *      minMessage = "Body nemohou být záporné",
     *      maxMessage = "Příliš mnoho bodů"
     * )
     */
     private $points;

在twig模板中,当我遍历form.points时,没有字段有错误,但form.points有。有谁知道问题可能在哪里?或者我错过了什么?非常感谢:-)(Symfony v.2.1.4)

编辑:似乎如果我使用表单集合('type'=&gt; new PointsFormType())而不是'type'=&gt; 'text',它以某种方式按预期工作。这是否意味着我总是需要使用表单集合才能将错误分配给某个字段?

2 个答案:

答案 0 :(得分:3)

您可能需要添加cascade_validation' => true

$builder->add('startYear', 'hidden')
       /*
           some other form elements
       */
        ->add('points', 'collection', array(
            'type' => 'text',
            'allow_add' => true,
            'label' => 'Body za jednotlivé úlohy:',
            'error_bubbling' => false,
            'cascade_validation' => true,
            'attr' => array("maxlength" => "4", "size" => "4")
        ));
}

答案 1 :(得分:3)

要小心,因为已从Sf3中移除cascade_validation属性:http://symfony.com/doc/2.8/reference/forms/types/collection.html#cascade-validation

  

在Symfony 2.8和中,不推荐使用cascade_validation选项   将在3.0中删除。而是使用您的有效约束   模型级联验证。请注意这个事实   对于子表单,不会考虑validation_group选项。