Rendre une option obligatoire dans un formulaire Symfony2

Rendre une option obligatoire dans un formulaire Symfony2
par Rémi Leclerc, le 20/01/2015

Pour rendre obligatoire une option dans un formulaire Symfony2, il faut la définir comme telle dans la méthode setDefaultOptions().

namespace Acme\MonBundle\Form;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
 
class ArticleEditionType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $article = $options['article'];
 
        //...
    }
 
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver
            ->setDefaults(array(
                'data_class' => '\Acme\MonBundle\Entity\Article',
                'article'
            ))
            ->setRequired(array('article'))
            ->setAllowedTypes(array(
                'article' => '\Acme\MonBundle\Entity\Article'
            ))
        ;
    }
 
    //...
}

La méthode setRequired() prend en argument un tableau des options obligatoires. Si une option obligatoire n'est pas passée à buildForm(), une erreur sera générée. La méthode setAllowedTypes() permet de spécifier la classe d'une option.