Maxime Pinot

Formulaire Symfony : empêcher un nombre d'être arrondi

Dans un formulaire Symfony, si vous attendez que l’utilisateur saisisse un nombre décimal, alors vous utiliserai naturellement le type de champ NumberType.

Toutefois, le type de champ NumberType arrondi systématiquement la valeur envoyée (par défaut à 3 chiffres derrières la virgule). Ce comportement peut être ajusté via l’option scale. Mais l’option scale n’est pas désactivable et vous ne pourrez pas empêcher Symfony d’arrondir la valeur.

Si vous voulez empêcher Symfony d’arrondir la valeur saisie, il faut utiliser le type TextType.

Mais attention ! Utiliser simplement le type TextType ne suffira pas. Vous devez vous assurer que la chaîne de caractères saisie contienne bien un nombre décimal. Pour cela, il faut ajouter une contrainte de validation. La contrainte Type est ce qu’il vous faut !

Voici le code nécessaire pour avoir un champ de formulaire qui accepte seulement une chaîne numérique :

 1<?php
 2
 3declare(strict_types=1);
 4
 5namespace Foo;
 6
 7use Symfony\Component\Form\AbstractType;
 8use Symfony\Component\Form\Extension\Core\Type\TextType;
 9use Symfony\Component\Form\FormBuilderInterface;
10use Symfony\Component\Validator\Constraints\Type;
11
12final class FooType extends AbstractType
13{
14    public function buildForm(FormBuilderInterface $builder, array $options)
15    {
16        $builder->add('numeric', TextType::class, [
17            'constraints' => new Type(['type' => 'numeric'])
18        ]);
19    }
20}