Ошибка при сборе форм

Здравствуйте, у меня проблема с коллекцией текстовых полей в моей форме. При наличии ошибок в одном из полей эти ошибки переходят в родительскую форму, поэтому они присваиваются не полю, а самому родителю. Это коллекция 'points' в следующем фрагменте кода. Я попытался установить 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', это как-то работает как положено. Означает ли это, что мне всегда нужно использовать набор форм, чтобы иметь возможность присваивать ошибки определенному полю?

2 ответа

Вам может понадобиться добавить 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")
        ));
}

Будьте осторожны, потому что cascade_validation атрибут был удален из Sf3: http://symfony.com/doc/2.8/reference/forms/types/collection.html

Опция cascade_validation устарела в Symfony 2.8 и будет удалена в 3.0. Вместо этого используйте ограничение Valid в вашей модели для каскадной проверки. Помните о том, что параметр validation_group не будет учитываться для дочерних форм.

Другие вопросы по тегам