2016-10-10 5 views
3

私はデータベースからのデータを含むフォームをまだ持っていますが、WIP(私はまだ追加していないいくつかのフィールドがありません)です。 フォームは最初の選択でデータをロードし、その選択に基づいて、最初の選択(基本的に選択した値への関連付け)に基づいてオプションを使用して2番目の選択を入力するためにajaxを使用します。私はフォームを送信すると、データからデータベースからレポートを生成したいと思います。symfony ajaxフォームを動的に変更します

This value is not valid. 

フォームクラス:

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('survey', EntityType::class, [ 
      'class' => SurveyManager::class, 
      'placeholder' => 'Choose option', 
      'attr' => [ 
       'class' => 'field-change', 
      ], 
     ]) 
     ->add('headquarter', ChoiceType::class, [ 
      'choices' => [], 
     ]) 
     ->add('submit', SubmitType::class, [ 
      'label' => 'Save', 
     ]) 
    ; 
} 

私はエラーまたはどのように問題を解決する方法がわからreallていないよ、私は常にエラーを取得するので、私は2番目のフィールドでこだわっている瞬間のために このタイプのフォームを処理する必要があります。みんなを助けてくれますか?

私はこの

$builder->addEventListener(
    FormEvents::PRE_SUBMIT, 
    function (FormEvent $event) { 
     $form = $event->getForm(); 

     $data = $event->getData(); 

     $form->add('headquarter', EntityType::class, [ 
      'class' => HeadQuarterManager::class, 
      'query_builder' => function(HeadQuarterManagerRepository $er) { 

       return $er->getHeadquarter($data['survey']); 
      }, 
     ]); 
    } 
); 

をしましたが、私はこのエラーを取得しています回答に基づいて:私は返すことができるようにgetHeadquarterメソッドにデータを渡す方法

Notice: Undefined variable: data 

本当にわかりませんselectのid => nameの配列。

答えて

4

$form->isValid()関数を実行すると、buildForm関数で構築したフォームと照合します。そこにない余分なフィールド/値はこのエラーの原因になります。

form eventsを使用してこの動作を変更することができます。最後に

+0

私はあなたがそれを言うつもり考えていた... :-D問題は、私はそれらを使ったことがないと私はかなり理解していなかったですドキュメント:( –

+0

@LSそれの音からオプション3が必要ですhttp://symfony.com/doc/current/form/dynamic_form_modification.html#form-events-submitted-dataあなたが一度それをしたら – Rooneyl

+0

ok私はその部分をチェックアウトさせて、いくつかのコードをtogtherに入れて、私はそこから何か愚かなことを見るでしょう:D –

0

これは私がそれをやった方法です:

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('survey', EntityType::class, [ 
      'class' => SurveyManager::class, 
      'attr' => [ 
       'class' => 'field-change', 
      ], 
     ]) 
     ->add('submit', SubmitType::class, [ 

     ]) 
     ->addEventListener(
      FormEvents::PRE_SUBMIT, 
      function (FormEvent $event) { 
       $form = $event->getForm(); 

       $data = $event->getData(); 
       $modifier = $data['survey']; 
       $form->add('headquarter', EntityType::class, [ 
        'class' => HeadQuarterManager::class, 
        'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) { 
         return $er->getHeadquarter($modifier); 
        }, 
       ]); 
      } 
     ); 
} 
関連する問題