Я пытаюсь получить данные из 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
}
Спасибо!
Это потому что PRE_SUBMIT
вызывается перед отправкой данных в форму. Вот почему $form->getData()
пусто, когда PRE_SUBMIT
срабатывает. Док говорит:
FormEvents::PRE_SUBMIT
событие отправляется в началеForm::submit()
метод.Может использоваться для:
- Измените данные из запроса, прежде чем отправлять данные в форму;
- Добавьте или удалите поля формы перед отправкой данных в форму.
Если вы хотите получить доступ к данным, вам нужно сделать это прямо в FormEvent
параметр отправляется в обработчик событий. В вашем случае это $event->getData()
,
Других решений пока нет …