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_?
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
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'),
);
}
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!
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')
));
}
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é
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');
},
));
}