2013-03-25 55 views
3

您好,我在表單中收集文本字段時遇到了問題。當其中一個字段中存在錯誤時,這些錯誤會冒泡爲父窗體,因此它們不會分配給字段,而是分配給父項本身。這是下面一段代碼中的'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我有$點屬性這樣寫的:

 /** 
    * @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'=> '文本',它以某種方式按預期工作。這是否意味着我總是需要使用表單集合才能將錯誤分配給某個字段?

回答

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") 
     )); 
}