Symfony2 имеет возможность формирования динамической генерации .
Однако существует большая проблема с динамической генерацией встроенных форм на основе данных, представленных пользователем:
Если я использую FormEvents :: PRE_SET_DATA, то я не могу получить данные post для встроенной формы – доступны только данные родительских объектов
$builder->get('contacts')->addEventListener( FormEvents::POST_SET_DATA function(FormEvent $event) { $data = $event->getData(); //$data will contain embedded form object - not the data object! } );
Если я использую FormEvents :: POST_SUBMIT, тогда я могу получить данные, но я не могу изменить форму
$builder->get('contacts')->addEventListener( FormEvents::POST_SUBMIT, function(FormEvent $event) { $data = $event->getData(); //$data will contain filled data object - everything is ok $form = $event->getForm(); //form will be ok if ($data->getSomeValue()) { $form->add(...); //Error: "You cannot add children to a submitted form" } } );
Пожалуйста, помогите: есть ли способ динамически генерировать встроенную форму на основе представленных пользователем данных?
Я использую Symfony 2.4.
Заранее большое спасибо!
Проблема была легко решена: необходимо использовать события FormEvents :: SUBMIT или FormEvents :: PRE_SUBMIT.
Для обоих из них можно получить данные отправки и изменить форму.
Разница между ними:
И есть еще лучшая возможность:
Вы можете использовать FormEvents :: POST_SUBMIT, но вам нужно прикрепить его к полю подформы, а не ко всей подчиненной форме.
В этом случае вы сможете: