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

20 juillet 2021 à 09:35

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 :

<?php

declare(strict_types=1);

namespace Foo;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Type;

final class FooType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('numeric', TextType::class, [
            'constraints' => new Type(['type' => 'numeric'])
        ]);
    }
}