symfony2 utilisant des groupes de validation dans la forme

j'ai une entité avec un bien:

/**
 * @var string $name
 *
 * @AssertNotBlank(groups={"foobar"})
 * @ORMColumn(name="name", type="string", length=225, nullable=false)
 */
private $name;

La Forme:

class MyType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '...',
            'validation_group' => array('foobar'),
        );
    }

    public function getName()
    {
        ...
    }
}

dans le Controller je lie la requête et j'appelle $form - > isValid ()

mais comment définir le groupe validation_?

11
demandé sur Uwe 2011-09-06 19:35:30

6 réponses

lors de la construction du formulaire dans le controller, ajouter un élément 'validation_groups' au tableau options:

$form = $this->createFormBuilder($users, array(
    'validation_groups' => array('foobar'),
))->add(...)
;

il est décrit dans la page de formulaires du livre symfony2: http://symfony.com/doc/current/book/forms.html#validation-groups

10
répondu Neil Katin 2011-09-06 17:36:58

depuis L'intérieur de votre classe FormType, vous pouvez définir les groupes de validation associés à ce type en définissant vos options par défaut:

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('group1', 'group2'),
    );
}
13
répondu Jeremy 2012-01-11 13:24:08

j'ai eu exactement le même problème. Je l'ai résolu de cette façon ...

// Entity
$employee = new Employee();

// Form creation
$form = $this->createForm(new EmployeeForm(), $employee, array('validation_groups'=>'registration'));

j'espère que ça aidera!

13
répondu Jernej Gololicic 2012-01-30 11:16:51

pour moi, sur symfony 2.1, Je l'ai résolu en ajoutant 'Default' dans validation_groups comme:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('Default', 'registration')
    ));
}
2
répondu Harold 2012-11-08 09:18:39

j'ai fait un petit billet de blog lié à ce problème: http://marcjuch.li/blog/2013/04/21/how-to-use-validation-groups-in-symfony/

dans ce post je vais montrer comment utiliser les groupes de validation dans symfony avec l'exemple d'un formulaire de commande qui devrait offrir la possibilité d'utiliser des adresses de facturation et d'expédition séparées. Cela comprend 3 étapes:

  • Groupe de validation contstraints pour liés à l'expédition, form zones together
  • déterminer les contraintes de validation qui s'appliquent, selon le case à cocher valeur dans le formulaire soumis
  • copier les données des champs non-expédition vers les champs d'expédition si la case à cocher est pas sélectionné
1
répondu Marc Juchli 2013-04-21 17:06:28

vous pouvez aussi définir dynamiquement les groupes de validation:

// MyCustomType.php
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => function (FormInterface $form) {
            $data = $form->getData();

            if (Client::TYPE_PERSON == $data->getType()) {
                return array('person');
            }

            return array('company');
        },
    ));
}
0
répondu Aistis 2016-07-12 12:02:09