46 votes

Symfony2 désactive la validation de formulaire HTML5

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.

1voto

Jon Winstanley Points 11280

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 %}

0voto

Saman Mohamadi Points 1384

Pour désactiver la validation Regex pour un champ spécifique en utilisant la classe formType :

->add('foo',null,array=>('attr'=>('pattern'=>'/[^~,]/'))

0voto

JohnSmith Points 159

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'

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