Pense bête : Gestion des erreurs avec les formulaires imbriqués sous Symfony 2.1

Lorsqu’on met en place des formulaires imbriqués avec Symfony 2.1 il ne faut pas oublier que la gestion des formulaires à légèrement été revue entre la version 2.0 et les versions 2.x, comme expliqué dans la notice prévue UPGRADE FROM 2.0 to 2.1.

Il ne faut également pas oublier de consulter la documentation Symfony officielle expliquant le fonctionnement et la mise en place des formulaires imbriqués.

Au sujet des erreurs sur les formulaire imbriqué, cette dernière nous expose comment « faire remonter » les erreurs propres au premier formulaire imbriqué dans le second. Il ne faut pas oublier de préciser au formulaire qui reçoit le premier, qu’il va devoir récupérer des erreurs autres que les siennes en précisant dans la méthode setDefaultOptions() de votre Form comme ceci :

namespace Acme\Bundle\AcmeBundle\Form;

class MyEntityType extends AbstractType
{
    public buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('myotherentity', new MyOtherEntityType());
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\Bundle\AcmeBundle\Entity\MyEntity',
            'cascade_validation' => true
        ));
    }

    ...
}

Le tout couplé avec vos « Assert » sur les champs de vos entitées et une vue exposant correctement les erreurs de vos formulaires comblera la plupart de vos besoins.

2 réflexions au sujet de « Pense bête : Gestion des erreurs avec les formulaires imbriqués sous Symfony 2.1 »

  1. Bonjour,
    Comment faire pour utiliser les contraintes de validation de myotherentity ( comme avec ‘cascade_validation’ => true ) mais laisser la possibilité que myotherentity soit null ( sans passer par un callback qui devrait tester tous les champs de myotherentity si l un d entre eux n est pas vide )

    exemple: un article n’a pas forcément une image liée mais lorsque qu’on en lie une, les contraintes de validation doivent etre appliquees.

    • Pour ce cas précis nous allons rédiger prochainement un article pour décrire exactement comment procéder. Nous nous sommes confronté à ce type de problème et nous avons trouvé une solution du côté des groupes de validation couplés à une interface (et donc en utilisant une méthode de cette interface).

      En guise de premier élément de réponse voilà quelques liens relatant de l’interface GroupSequenceProviderInterface et des groupes de validations :
      http://goo.gl/NT6zn
      http://goo.gl/YtBlu

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>