2016-10-10 24 views
4

次のフォームタイプを指定すると、送信前に2番目のフィールドをどのようにレンダリングできますか? 私は$form->removeてみましたが、私はいつもこのエラーが出るでしょう。これを修正する方法Symfony pre_submitフィールドの変更順序

Warning: Illegal offset type in isset or empty 

本当にわかりません。

/** 
* @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); 
        }, 
       ]); 
      } 
     ); 
} 
+0

「提出前にレンダリングする」とはどういう意味ですか?そのトリックを行うべきjavascriptですか?その場合は、最初にボタンを隠すクラス( 'hidden'など)を追加し、jQueryにサブミットする前にそれを表示させます。 – Rvanlaak

答えて

0

Symfonyのフォームコンポーネントは、フォームのフィールドの並べ替えをサポートしていません。彼らは、問題#5827#11241のこの機能について話しました。

あなたは(はい、再び)headquerterともsubmitを追加し、イベントリスナーのフィールドsubmitを削除しようとすることができます。しかし、私はこれが仕事になるとは思っていません。

もう1つの解決策は、インストールIvoryOrderedFormBundleです。フォームフィールドに新しいオプションを追加します:position

+0

はい、私はgithub上でそれらの問題を見て、私は彼らがそれを3.0に置くことを願っていたようでした:))その後、彼らは= Dに気づいていませんでした。私もIvoryOrderedFormBundleを見ましたが、もしそれを使うべきかどうかはわかりませんでした。私は削除して、もう一度追加しようとしましたが、うまくいきませんでした。私はいつも上記のエラーを受け取ります:D –

1

私が使用した解決策は、クラスタイプから送信ボタンを削除して手動でテンプレートに追加し、送信ボタンの前に{{form_rest(form)}}を使用することでした。

関連する問題