LogoLogo
Docs officielsTutos officiels
Symfony-6-B.U.T.
Symfony-6-B.U.T.
  • Présentation
  • Semestre 3
    • Séance 0 : Docker et Installation
    • Séance 1 : Introduction & Eco-système Symfony
    • Séance 2 : Architecture de Symfony & première page
    • Séance 3 et 4 : Controller, Routes et vues : les bases de notre fil rouge
    • Séance 5 : Modèles - Entités - ORM
    • Séance 6 : Relations entre entités
    • Séance 7 : Formulaires
    • Séance 8 : Exercices
    • Séance 9 : Mails
    • Séance 10 : Sécurité
  • Anciennes ressources
    • Séance 3 : Vues - TWIG
    • Séance 4 : Exercices
  • Semestre 4
    • Contexte du S4
    • Séance 1 : Notion de service, exemple du mail
    • Séance 2 : Filtres twig
    • Séance 3 : AssetMapper
    • Séance 4 : Mise en place d'un panier
    • Séance 5 : Event Dispatcher/Listener
    • Séance 6 : Localisation de l'application
    • Séance 7 : Requetes personnalisés (repository)
    • Séance 8 : Formulaires
    • Séance 9 : Formulaires et validations
    • Séance 10 : Sécurité et voters
    • Séance 11 : Séance révision
    • Séance 12 - 13 : TP Noté (2 heures 45)
    • Séance 14 : Evaluation écrite
  • Autres ressources
    • FAQ
    • Installation
    • Mise en production
    • Créer un environnement Symfony collaboratif
Propulsé par GitBook
Sur cette page
  • Validation des formulaires
  • Validation des champs
  • Validation des entités
  • Exercice

Cet article vous a-t-il été utile ?

Exporter en PDF
  1. Semestre 4

Séance 9 : Formulaires et validations

PrécédentSéance 8 : FormulairesSuivantSéance 10 : Sécurité et voters

Dernière mise à jour il y a 2 mois

Cet article vous a-t-il été utile ?

Validation des formulaires

La documentation officielle se trouve ici :

Depuis le S3, nous écrivons systèmatiqument le code suivant pour enregistrer un formulaire :

if ($form->isSubmitted() && $form->isValid()) {
   ...
}

Ce code fait deux choses. Il vérifie que le formulaire a été soumis, et qu'il est valide. Jusqu'a présent le coté "validation" n'est pas géré car nous n'avons pas mis de règles de validation sur nos formulaires. Nous allons donc voir comment ajouter des règles de validation sur nos formulaires.

Validation des champs

Pour ajouter des règles de validation sur un champ, nous allons utiliser les contraintes de validation. Pour cela nous devons modifier notre formulaire JeuType :

<?php

namespace App\Form;

...
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Positive;
use Symfony\Component\Validator\Constraints\Type;

class JeuType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('nom', TextType::class, [
                'label' => 'Nom du jeu',
                'help' => 'Le nom du jeu',
                'constraints' => [new Length(['min' => 2, 'max' => 100, 'minMessage' => 'Le nom doit faire au moins {{ limit }} caractères', 'maxMessage' => 'Le nom doit faire au plus {{ limit }} caractères'])],
            ])
            ->add('duree', TextareaType::class, [
                'label' => 'Durée d\'une partie',
                'help' => 'La durée en moyenne d\'une partie',
                'constraints' => [new NotBlank(['message' => 'La durée moyenne d\'une partie ne peut pas être vide'])
            ]])
            ...
        ;
    }

   ...
}

Dans cet exemple nous avons ajouté une contrainte de type Length sur le champ nom. Nous avons également ajouté une contrainte de type NotBlank sur le champ duree. Nous pouvons ajouter autant de contraintes que nous le souhaitons sur un champ.

Pour chaque contrainte on peut définir un message. Ce message sera affiché sous le champs qui pose problème. (form_errors dans le thème de votre formulaire pour le personnaliser).

Validation des entités

Cette syntaxe est intéressante, mais ne vérifie les données que si le formulaire est soumis. Dans les autres cas, les données ne sont pas forcément validées. Selon votre fonctionnement, il peut être nécessaire de les valider (exemple envoie depuis une API, import de données, ...).

Pour valider les entités, nous allons utiliser les attributs de validation. Les possibilités sont les mêmes que pour les contraintes de validation sur les formulaires. La syntaxe utilise les attributs (depuis PHP 8.0).

Pour cela nous pouvons modifier notre entité Editeur par exemple, pour le code postal :

<?php

namespace App\Entity;

use App\Repository\AdresseRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity(repositoryClass: EditeurRepository::class)]
class Editeur
{
    #[ORM\Column(length: 5)]
    #[Assert\Length(min: 5, max: 5)]
    private ?string $codePostal = null;
...
}

Exercice

  • Ajoutez les contraintes de validations sur vos formulaires. Testez les en soumettant des données invalides.

  • Personnalisés l'affiche des erreurs dans vos formulaires

La liste des contraintes par défaut est disponible sur la .

https://symfony.com/doc/current/validation.html
documentation de Symfony