Aller au contenu principal

Validation des données

Une fois les données récupérées et mappées, il faut s'assurer qu'elles sont valides.

Cette responsabilité ne relève pas du composant Form de Symfony mais du composant Validator.

On va pouvoir simplement appeler, depuis le formulaire, 2 méthodes : isSubmitted et isValid, pour s'assurer que le formulaire a bien été soumis par l'utilisateur, puis que les données sont valides :

//...
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
// Si tout va bien, alors on peut persister l'entité et valider les modifications en BDD
$em->persist($newsletter);
$em->flush();
}

Mais pour pouvoir valider les données correctement, il faut qu'on spécifie un format de validation sur nos différents champs.

Par exemple, comment signifier à mon composant Validator que le champ email de mon entité Newsletter doit accepter des chaînes de caractère qui ont le format d'un email ?

On peut poser des contraintes de validation directement au niveau de l'entité :

//...
use Symfony\Component\Validator\Constraints as Assert;
//...
class Newsletter
{
#[ORM\Column(length: 255)]
#[Assert\Email]
private ?string $email = null;

//...
}
Contraintes de validation

Les contraintes de validation peuvent s'appliquer sous forme d'attributs PHP8 directement sur les propriétés de l'entité.

Avant, on pouvait utiliser des annotations :

/**
* @ORM\Column(type="string", length=255)
* @Assert\Email
*/
private $email;

Pour retrouver toutes les contraintes de validation disponibles dans Symfony, on peut consulter cette page.

version

Attention à sélectionner la bonne version de Symfony quand vous consultez la documentation. Nous utilisons ici la version 6.4, mais la dernière version majeure de Symfony est la version 7. Cela signifie que certaines choses peuvent avoir changé entre la version 6 et la version 7. Par défaut la documentation s'affiche dans la dernière version

Avec l'application de contraintes de validation dans les champs de nos entités, le composant Validator peut détecter et remonter les erreurs de format dans le formulaire.