lets say i have form like follow in my controller
$data = [];
$form = $this->createFormBuilder($data)
->add('username', 'text', [ 'mapped' => FALSE, 'required' => FALSE ])
->add('show_email', 'checkbox', [ 'mapped' => FALSE, 'required' => FALSE ])
->add('submit', 'submit')
->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SUBMIT, function($event){
$user = $event->getData();
$form = $event->getForm();
if (true == $user['show_email']) {
$form->add('email', 'email', [
'required' => FALSE,
'data' => '[email protected]'
]);
}
$form->setData($user);
})
->getForm()
;
$form->handleRequest($request);
and I am listening to the PRE_SUBMIT
event to add email
field when a user checks the show_email
.During the PRE_SUBMIT
, the email
field added successfully but when I am trying assign data in that field it is not shown in the form view. In the example, i use 'data' => '[email protected]'
to add value to that email field
, but that value is not populating in the email field. so what mistake I made here?
I solved this issue by adding email
field value to the event data
, like $data['email'] = "[email protected]"
, then reassign
the event data $event->setData($data)
again.
->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SUBMIT, function($event){
$form = $event->getForm();
$data = $event->getData();
if(isset($data['showEmail']) && $data['showEmail'] == TRUE){
$form->add('email', 'email', [
'mapped' => FALSE ,
]);
$data['email'] = "[email protected]";
}
else
{
unset($data['email']);
}
$event->setData($data);
})