My form is as follows:
class CpanelRetailerForm extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name', 'text', array( 'attr' => array( 'class' => 'text-input', 'size' => '50' ), 'required' => false )) ->add('email', 'email', array( 'attr' => array( 'class' => 'text-input', 'size' => '50' ), 'required' => false )) ->add('addUser', 'checkbox', array( 'label' => 'Add User account', 'required' => false, 'mapped' => false )) ->add('user',new CpanelUserForm()); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\TestBundle\Entity\Retailer',
I want to dynamically set this line from the controller depending on whether the checkbox of the addUser field is checked or not.
cascade_validation' => true
Here is my controller code:
$form = $this->createForm(new CpanelRetailerForm(), new Retailer()); $form-> if ($this->getRequest()->isMethod('POST')) { $form->bind($this->getRequest()); if ($form->get('addUser')->getData()) {
How can I do this inside the controller?
My attempt: added this line to my form class:
$builder->addEventListener( FormEvents::POST_SUBMIT, function(FormEvent $event) { $form = $event->getForm(); $addUser = $form->get('addUser')->getData(); $validation = false; if ($addUser) { $validation = true; } $resolver = new OptionsResolver(); $resolver->setDefaults(array( 'cascade_validation' => $validation )); $this->setDefaultOptions($resolver); } );
This did not help me. Although I get data in $ addUser, cascade_validation is not added