2017-01-25 2 views
1

Ich versuche, Daten von einem EventListener in einer benutzerdefinierten AbstractType-Klasse mit FormEvents::PRE_SUBMIT zu erhalten, aber Daten gibt leere Felder zurück, wenn ich FormEvents::SUBMIT verwenden, erhalten Felder Daten, aber ich kann keine Felder hinzufügen.Verwenden Sie PRE_SUBMIT EventListener in AbstractType Symfony 3

Wissen Sie, warum $form->getData() leere Felder zurückgibt?

Meine Klasse ist:

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 
} 

Dank!

Antwort

1

Das ist, weil PRE_SUBMIT aufgerufen wird, bevor die Daten an das Formular übermittelt werden. Aus diesem Grund ist $form->getData() leer, wenn PRE_SUBMIT ausgelöst wird. The doc says:

Das FormEvents::PRE_SUBMIT Ereignis zu Beginn des Verfahrens Form::submit() abgesendet wird.

von der Anfrage
  • Daten ändern, bevor die Daten in das Formular einreicht;:

    Es kann verwendet werden,

  • Fügen Sie Formularfelder hinzu oder entfernen Sie sie, bevor Sie die Daten an das Formular senden.

Wenn Sie die Daten zugreifen möchten, müssen Sie es direkt im FormEvent Parameter an den Ereignishandler gesendet tun. In Ihrem Fall ist das $event->getData().

Siehe FormEvent and its getData() method in the API.

+0

Oh, vielen Dank! – sgb004

Verwandte Themen