Используйте PRE_SUBMIT EventListener в AbstractType Symfony 3

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

Ты знаешь почему $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 срабатывает. Док говорит:

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

Может использоваться для:

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

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

Увидеть FormEvent и его метод getData () в API.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector