Je construis une forme symfony complexe qui est un peu longue et contient d'autres formes incorporées. Ainsi, le formulaire est affiché dans l'interface utilisateur dans des onglets distincts pour le rendre plus lisible et pratique pour l'utilisateur. Comme le formulaire est long et séparé dans l'interface utilisateur, il est possible que vous ayez manqué quelque chose en le remplissant ou que vous ayez simplement inséré quelque chose de incorrect. C'est à ce moment que la validation intervient et empêche le formulaire d'être sauvegardé. La validation elle-même est configurée et fonctionne parfaitement.Vérifiez si un groupe de validation spécifique est valide dans Symfony Form?
Mon problème ici est que j'ai un formulaire gigantesque, séparé en onglets, qui a une erreur quelque part et j'ai besoin de parcourir chacun des onglets pour voir exactement ce qui est faux. Je pensais à faire cet onglet spécifique, contenant des champs avec des erreurs, dans une autre couleur afin qu'il puisse se démarquer et vous faire gagner du temps de se demander ce qui ne va pas et où il se trouve.
D'après ce que je pouvais voir, j'ai deux options:
- Vérifiez tous les champs par onglet, manuellement, en utilisant quelque chose comme:
{% if not form.children.FIELD_NAME.vars.valid %}
qui prendrait une éternité pour terminer et je le ferais que si elle est la seule façon possible. - Essayez d'utiliser
validation_groups => array('Default', 'my_tab_name')
et regroupez logiquement les champs pour chaque onglet.
Je suis vraiment l'espoir d'utiliser la deuxième méthode, mais je ne peux pas sembler comprendre comment vérifier si le groupe de validation à savoir my_tab_1
contient des erreurs. Je suis conscient que je peux faire quelque chose comme ceci:
$validator = $this->get('validator');
$my_tab_1 = $validator->validate($entity, null, array('my_tab_1'));
$my_tab_2 = $validator->validate($entity, null, array('my_tab_2'));
$my_tab_3 = $validator->validate($entity, null, array('my_tab_3'));
// so on
Mais la forme est déjà en cours de validation avec $form->validate()
et en utilisant cette approche déclencherait N plus inutiles validations.
Donc la question ici est de savoir comment vérifier si un groupe de validation spécifique est valide à partir d'un modèle de brindille? Si ce n'est pas possible, peut-on l'obtenir du Controller
et le passer comme variable sans faire encore une autre validation?
Je ne pense pas que je devrais poster le FormType
s parce qu'ils sont longs, imbriqués et pourraient ne vous rendre confus. Cependant, ceci est une version simplifiée du formulaire parent:
class CompanyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('address')
->add('representedBy')
->add('category')
->add('phone')
->add('member', new MemberType())
->add('contacts', new ContactType())
->add('notes', new NoteType())
// and a couple more embedded form types.
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\FooBundle\Entity\Company',
'cascade_validation' => true
));
}
/**
* @return string
*/
public function getName()
{
return 'app_company';
}
}
Si quelqu'un a une meilleure idée ou d'une solution, je l'apprécie vraiment.
Jetez un oeil à craueformflowbundle: https://github.com/craue/CraueFormFlowBundle –