Lors de la validation d'un formulaire, le besoin peut être de valider différemment les données selon le bouton cliquer lors de la soumission du formulaire. L'option validation_groups
prend habituellement un tableau de groupes de validation mais accepte également une fonction de callback. Ce callback prend FormInterface
en paramètre permettant d'y placer une logique dépendante de l'état du formulaire.
Comme par exemple, le bouton sur lequel l'utilisateur a cliqué :
<?php
namespace Acme\Bundle\AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class FoobarType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('foobar', 'text')
->add('barfoo', 'text')
->add('save', 'submit')
->add('save_and_publish', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
// If save_and_publish button is clicked, use "SaveAndPublish" validation group
if ($form->get('save_and_publish')->isClicked()) {
return ['SaveAndPublish'];
}
// Else use "Default" validation group
return ['Default'];
}
));
}
public function getName()
{
return 'foobar';
}
}
Les commentaires