Je veux valider mon formulaire en utilisant uniquement la validation côté serveur. Cependant, si le navigateur supporte le HTML5, il valide en utilisant les attributs HTML5 ajoutés au formulaire par symfony2. J'ai donc besoin d'empêcher la validation HTML5.
Réponses
Trop de publicités?Si vous avez réellement besoin de supprimer les attributs de validation (si vous utilisez une bibliothèque de validation et souhaitez conserver toutes vos contraintes de validation en un seul endroit, par exemple), vous pouvez écraser le bloc widget_attributes dans twig.
Si vous utilisez déjà des modèles de formulaires personnalisés dans app/Resources/views/form.html.twig par exemple (et que vous l'avez activé dans votre config.yml), il vous suffit d'ajouter un bloc de
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}
{% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
Tout ce que j'ai fait ici est de supprimer les attributs liés à la validation :
{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
Utilisez forme de thématisation :
Créez d'abord un modèle de thème de formulaire, par exemple app/Resources/views/form/fields.html.twig :
{% extends 'form_div_layout.html.twig' %}{# or some other base layout #}
{% block form_start %}
{% if attr.novalidate is not defined %}
{% set attr = attr|merge({'novalidate':'novalidate'}) %}
{% endif %}
{{ parent() }}
{% endblock %}
Utilisez ensuite ce thème de formulaire dans votre modèle :
{% form_theme form with 'form/fields.html.twig' %}
{{ form_start(form) }} <-- now renders with novalidate attribute
...
{{ form_end(form) }}
Ou, appliquer le thème globalement (app/config/config.yml) :
twig:
form_themes:
- ':form/fields.html.twig'
- Réponses précédentes
- Plus de réponses