您好我的表单中的文本字段集合存在问题。当其中一个字段中存在错误时,这些错误会冒泡到父表单中,因此它们不会分配给字段,而是分配给父本身。它是以下代码段中的“点”集合。我试图将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',它以某种方式按预期工作。这是否意味着我总是需要使用表单集合才能将错误分配给某个字段?
答案 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选项。