2017-01-25 3 views
1

Я пытаюсь получить данные из EventListener в пользовательском классе AbstractType, используя FormEvents::PRE_SUBMIT, но данные возвращают пустые поля, если я использую FormEvents::SUBMIT, поля получают данные, но я не могу добавлять поля.Использовать PRE_SUBMIT EventListener в AbstractType Symfony 3

Вы знаете, почему $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 вызывается перед отправкой данных в форму. Вот почему $form->getData() пуст, когда запускается PRE_SUBMIT. The doc says:

FormEvents::PRE_SUBMIT событие отправляется в начале метода Form::submit().

Он может быть использован для:

  • Изменения данных из запроса, перед отправкой данных в форму;
  • Добавить или удалить поля формы перед отправкой данных в форму.

Если вы хотите получить доступ к данным вы должны сделать это непосредственно в параметре FormEvent отправляется в обработчик события. В вашем случае это $event->getData().

См. FormEvent and its getData() method in the API.

+0

О, спасибо вам большое! – sgb004

Смежные вопросы