set validation group to embedded forms in symfony 2 set validation group to embedded forms in symfony 2 symfony symfony

set validation group to embedded forms in symfony 2


It works for me

class FormB extends AbstractType {    public function buildForm(FormBuilderInterface $builder, array $options) {        $builder->add('A', new FormA(), array('validation_groups' => array('yourValidationGroup')));    }    public function setDefaultOptions(OptionsResolverInterface $resolver) {        $resolver->setDefaults(array(            'data_class' => 'Acme\TestBundle\Entity\B',            'cascade_validation'=>true        ));    }}

Also defining the validation group in FormB->setDefaultOptions work. It apply the validation group to all subforms.

    public function setDefaultOptions(OptionsResolverInterface $resolver) {        $resolver->setDefaults(array(            'data_class' => 'Acme\TestBundle\Entity\B',            'cascade_validation'=>true,            'validation_groups' => array('yourValidationGroup')        ));    }

To use that depending on underlying data you can put that code on a event listener:

public function buildForm(FormBuilderInterface $builder, array $options) {    $builder->addEventListener(            FormEvents::POST_SET_DATA,            function(FormEvent $event) {                $form=$event->getForm();                /**                 * @var ContactDetail $detail                 */                $entity=$form->getData();                if($entity->getA()->isRequired()){                    $form->add('A', new FormA(), array('validation_groups' => array('yourValidationGroup')));                } else {                    $form->add('A', new FormA(), array());                }            }    );}


The property cascade_validation is deprecated in Symfony 2.8, and will be removed in Symfony 3.0. For use cascade_validation, you should use @Assert\Valid constraint.

class Profile{  /**   * @var Address   *    * @Assert\Valid()   */  private $address;}

P.S. Attention: links provides for Symfony 2.8 version.