3

您好,我在表单中收集文本字段时遇到问题。当其中一个字段出现错误时,这些错误会冒泡到父表单中,因此它们不会分配给字段,而是分配给父级本身。它是以下代码中的“点”集合。我试图将 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;

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

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

4

2 回答 2

4

您可能需要添加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")
        ));
}
于 2014-02-10T22:32:14.300 回答
4

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

cascade_validation 选项在 Symfony 2.8 中已被弃用,并将在 3.0 中删除。相反,请在模型中使用 Valid 约束来级联验证。请注意,validation_group 选项不会被考虑用于子表单。

于 2017-02-17T16:08:29.387 回答