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