66 votes

Vérification simple si le champ du formulaire contient des erreurs dans le modèle Twig

Dans le modèle Twig, je vérifie si un champ a une erreur comme ceci :

{% if form.points.get('errors') is not empty %}

Y a-t-il une méthode comme :

{% if form.points.hasErrors() %}

pour le faire plus simplement ? Ce n'est pas une grande différence, mais si je ne peux pas le faire plus simplement, pourquoi pas ?

0 votes

De nombreuses réponses ont été ajoutées et certaines d'entre elles dépendent de la error_bubbling réglage. J'ai ajouté un PR au symfony cookbook pour améliorer la documentation. N'hésitez pas à voter pour lui ici : github.com/symfony/symfony-docs/issues/6145

0 votes

Voir mon commentaire sur la façon de le faire avec symfony 3.4, la façon sale par twig for&set ou à l'intérieur du contrôleur : stackoverflow.com/a/49785276/7491491 N'oubliez pas d'upvoter s'il répond à vos besoins :)

117voto

birko Points 462

Le meilleur moyen que j'ai trouvé est d'utiliser ce genre de code.

{% if not form.vars.valid %}
<div class="alert alert-error">
    {{ form_errors(form) }}
</div>
{% endif %}

1 votes

Malheureusement, cela ne fonctionne pas pour moi, en appelant {{ form_errors(form.somefield) }} fonctionne toujours.

2 votes

@ex3v cela dépend de la façon dont vous avez configuré vos bulles d'erreurs.

1 votes

Pourriez-vous développer votre réponse ?

94voto

Kris Wallsmith Points 4804

Cette méthode n'existe pas. Je fais généralement {% if form.points.vars.errors|length %} .

13 votes

Cela ne fonctionne pas pour moi qui utilise Symfony 2.3. La solution de birko avec form.vars.valid fonctionne bien.

0 votes

@binarious Cette méthode fonctionne bien dans Symfony 2.3 mais vous avez raison, la solution de birko est meilleure maintenant.

0 votes

Lorsqu'il y a une erreur, cette solution produira 0 SI error_bubbling est réglé sur True dans le type de formulaire.

18voto

jkucharovic Points 1417

Vous pouvez également vérifier les erreurs lorsque vous remplacez le rendu des champs :

{% block field_row %}
{% spaceless %}    
    <div class="control-group {% if errors %}error{% endif %}">
      {{ form_label(form) }}
      <div class="controls">
        {{ form_widget(form) }}        
        {{ form_errors(form) }}        
      </div>
    </div>    
{% endspaceless %}
{% endblock field_row %}

13voto

d3uter Points 36

Pour une personnalisation plus poussée des formulaires, je le fais :

<div class="form-group {% if form.MYFORMINPUT.vars.valid==false %}has-error{% endif %}">
//some twisted divs
{{form_label(form.MYFORMINPUT)}}
{{form_widget(form.MYFORMINPUT)}}
</div>

Sf2.5

-2voto

adavea Points 551

J'ai eu un problème similaire, mais form.points n'existe pas dans mes modèles twig.

Je devais obtenir le nombre d'erreurs dans le contrôleur, puis le passer dans mes modèles en tant que variable. $form->getErrors() ne se comporte pas comme vous pourriez vous y attendre dans votre contrôleur. Voir cette question SO pour une fonction qui récupérera les erreurs de formulaire correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X