Reputation: 427
I have created a form with a collection of other forms in symfony 3. After Submitting I want to manipulate different Datas. How can I get access of it and how can I set them ?
This is how I tried it:
public function registerAction(Request $request)
{
$register = $this->createFormBuilder()
->add('user', 'AppBundle\Form\Type\UserType', array(
'data_class' => User::class,
))
->add('userdata', 'AppBundle\Form\Type\UserdataType', array(
'data_class' => Userdata::class,
))
->add('addresses', 'AppBundle\Form\Type\AddressesType', array(
'data_class' => Addresses::class,
))
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event){
$user = $event->getForm()->get('user')->getData();
$address = $event->getForm()->get('addresses')->getData();
$address->setSalutation($user->getSalutation());
})
->getForm();
$register->handleRequest($request);
if ($register->isSubmitted()) {
// do stuff
}
return $this->render('form/login_index.html.twig', [
'register' => $register->createView()
]);
}
In this example:
$user = $event->getForm()->get('user')->getData();
$address = $event->getForm()->get('addresses')->getData();
$address->setSalutation($user->getSalutation());
Upvotes: 0
Views: 509
Reputation: 737
You should integrate the object you are working on as a parameter for your createFormBuilder($object)
method.
For example:
$user = new User();
$form = $formFactory
->createBuilder($user)
->add('username', TextType::class);
And then you add your subscriber, in this case the $event->getData()
is an object of the class User
$form->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
/** @var User $user */
$user = $event->getData();
$form = $event->getForm();
// Your logic here ...
})->getForm();
UPDATE:
If you have an embedded form (property in relation with the parent class), example UserInformations you can simply make a call with:
$form
->add('informations', UserInformationType::class)
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
/** @var User $user */
$user = $event->getData();
/** @var UserInformation $userInformation */
$userInformation = $user->getInformation();
$form = $event->getForm();
// Your logic here ...
})->getForm();
Good luck.
Upvotes: 1