En cherchant une solution à ce problème, j'en ai trouvé une, qui semble la plus élégante si vous voulez désactiver la validation html5 dans toute votre application, alors j'ai pensé la partager ici. Les crédits vont à l'auteur de cet article de blog .
L'idée est de créer une extension pour le type de formulaire "form" comme ceci :
<?php
// src/AppBundle/Form/Extension/NoValidateExtension.php
namespace AppBundle\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
class NoValidateExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['attr'] = array_merge($view->vars['attr'], [
'novalidate' => 'novalidate',
]);
}
public function getExtendedType()
{
return 'form';
}
}
?>
Il suffit ensuite de l'enregistrer dans votre fichier services.yml comme ceci :
app.no_validation_form_extension:
class: AppBundle\Form\Extension\NoValidateExtension
tags:
- {name: form.type_extension, alias: form}
et le tour est joué. Tous vos formulaires ont automatiquement un novalidate
attribue maintenant.
Symfony 3.3
A partir de Symfony 3.3, la configuration est légèrement différente, mais toujours possible.
Légère mise à jour de la getExtendedType
pour renvoyer le FormType
classe.
// src/AppBundle/Form/Extension/NoValidateExtension.php
namespace AppBundle\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\Extension\Core\Type\FormType;
class NoValidateExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['attr'] = array_merge($view->vars['attr'], [
'novalidate' => 'novalidate',
]);
}
public function getExtendedType()
{
return FormType::class;
}
}
Plus un ajout mineur de l extended_type
qui est maintenant nécessaire dans votre déclaration de service :
app.no_validation_form_extension:
class: AppBundle\Form\Extension\NoValidateExtension
tags:
- {name: form.type_extension, alias: form, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType}