2017-01-25 12 views
1

を使用してAbstractTypeカスタムクラスのEventListenerからデータを取得しようとしましたが、データが空のフィールドを返しました。FormEvents::SUBMITを使用するとフィールドにデータが取得されますが、フィールドを追加できません。AbstractTypeでSymSony 3のPRE_SUBMIT EventListenerを使用

なぜ$form->getData()が空のフィールドを返すのか知っていますか?

私のクラスには、次のとおりです。

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options)  
    { 
     $builder 
      ->add('extra', ExtraType::class, array(
       'data_class' => ExtraForm::class 
      )) 
      ->add('sales', SalesType::class, array(
       'data_class' => SalesForm::class 
      )); 

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

      //Fields in data are empty 
      echo '<pre>'; 
      print_r($data); 
      echo '</pre>'; 

      /* 
      Example: 
      AppBundle\Entity\User Object 
      (
       [id:protected] => 
       [userType:protected] => 
       [sales:protected] => 
       [extra:protected] => 
       [username:protected] => 
       [usernameCanonical:protected] => 
       [email:protected] => 
      ) 
      */ 

      //CODE 
     }); 
    } 

    //CODE 
} 

ありがとう!

答えて

1

これは、データがフォームに送信される前にPRE_SUBMITが呼び出されたためです。このため、PRE_SUBMITがトリガーされたときに$form->getData()が空になります。 The doc says

FormEvents::PRE_SUBMITイベントがForm::submit()メソッドの開始時に送出されます。

それはに使用することができます:フォームにデータを送信する前に、要求から

  • 変更データを、
  • フォームにデータを送信する前に、フォームフィールドを追加または削除します。

あなたは、イベントハンドラに送信されFormEventパラメータで直接それを行うために必要なデータにアクセスする場合。あなたの場合は$event->getData()です。

FormEvent and its getData() method in the APIを参照してください。

+0

ああ、ありがとう! – sgb004

関連する問題