I use the Symfony2 form component to create and validate forms. Now I need to configure the validator groups based on a single field value, and, unfortunately, it seems that each example there is based on objects that are not used for several reasons.
Example: If the task is empty, all constraint checking tools should be removed, but otherwise, it should use the default validator set (or validator group).
In other words, what I'm trying to achieve makes subforms optional, but still check if the key field is populated.
Can someone give me an example how to set it up?
<?php namespace CoreBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Validator\Constraints as Assert; use CoreBundle\Form\Type\ItemGroupOption; class ItemGroup extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('title', 'text', array( 'label' => 'Titel', 'attr' => array('class' => 'span10 option_rename'), 'required' => false )); $builder->add('max_selections', 'integer', array( 'label' => 'Max tilvalg', 'constraints' => array(new Assert\Type('int', array('groups' => array('TitleProvided')))), 'attr' => array('data-default' => 0) )); $builder->add('allow_multiple', 'choice', array( 'label' => 'Tillad flere valg', 'constraints' => array(new Assert\Choice(array(0,1))), 'choices' => array(0 => 'Nej', 1 => 'Ja') )); $builder->add('enable_price', 'choice', array( 'label' => 'Benyt pris', 'constraints' => array(new Assert\Choice(array(0,1))), 'choices' => array(0 => 'Nej', 1 => 'Ja'), 'attr' => array('class' => 'option_price') )); $builder->add('required', 'choice', array( 'label' => 'Valg påkrævet', 'constraints' => array(new Assert\Choice(array(0,1))), 'choices' => array(0 => 'Nej', 1 => 'Ja') )); $builder->add('options', 'collection', array( 'type' => new ItemGroupOption(), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false ) ); $builder->add('sort', 'hidden'); } public function getName() { return 'item_group'; } public function setDefaultOptions(OptionsResolverInterface $resolver) { global $app; $resolver->setDefaults(array( 'validation_groups' => function(FormInterface $form) use ($app) {