10 - Validation des formulaires (Symfony 7)

Temps de lecture : 14 minutes environ.

Dans ce tutoriel, nous allons explorer comment gérer les contraintes de validation des données dans les formulaires et les entités de votre application Symfony. Il est essentiel de garantir que les données saisies par les utilisateurs respectent certaines règles pour assurer l'intégrité de la base de données et améliorer l'expérience utilisateur.

Introduction aux Contraintes de Validation

Les contraintes de validation permettent de vérifier que les données fournies respectent des règles spécifiques, comme s'assurer qu'une adresse email est valide ou qu'un champ ne soit pas vide. Symfony offre un ensemble de contraintes prêtes à l'emploi que vous pouvez utiliser dans vos entités ou directement dans vos formulaires.

Implémentation des Contraintes dans les Entités

Pour commencer, nous allons ajouter une contrainte de validation sur l'email d'un utilisateur dans l'entité User. Cela garantira que les adresses email saisies sont valides avant d'être enregistrées dans la base de données.

Exemple de Contrainte sur l'Email

Voici comment ajouter une contrainte de validation pour s'assurer que l'email est valide :

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
/**
* @Assert\Email(
* message = "L'adresse email '{{ value }}' est incorrecte."
* )
*/
private $email;

// autres propriétés et méthodes
}

Dans cet exemple, nous utilisons l'annotation @Assert\Email pour valider que la propriété $email contient bien une adresse email valide. Le message d'erreur est personnalisé pour informer l'utilisateur en cas d'erreur.

Validation dans les Formulaires

Les contraintes peuvent également être définies directement dans les formulaires. Cela permet une validation spécifique au formulaire, qui ne sera pas nécessairement appliquée au niveau de l'entité.

Exemple de Contrainte sur le Pseudo (Nickname)

Supposons que nous souhaitions limiter la longueur du pseudo à un minimum de 3 caractères et un maximum de 25 caractères :

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

class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('nickname', TextType::class, [
'constraints' => [
new Assert\Length([
'min' => 3,
'max' => 25,
'minMessage' => 'Votre pseudo doit comporter au moins {{ limit }} caractères.',
'maxMessage' => 'Votre pseudo ne peut pas dépasser {{ limit }} caractères.',
]),
],
])
// autres champs
;
}
}

Ici, nous utilisons la contrainte Assert\Length pour imposer des limites de longueur sur le champ nickname. Les messages d'erreur sont personnalisés pour informer l'utilisateur de manière claire.

Validation des Images et des Fichiers

Symfony permet également de valider les fichiers téléchargés, notamment les images. Par exemple, nous pouvons imposer des contraintes sur la taille de l'image, son format, ou ses dimensions.

Exemple de Contrainte sur une Image

Voici comment appliquer des contraintes sur une image téléchargée :

use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Validator\Constraints as Assert;

$builder->add('featureImage', FileType::class, [
'constraints' => [
new Assert\Image([
'maxSize' => '5M',
'mimeTypes' => [
'image/jpeg',
'image/png',
],
'mimeTypesMessage' => 'Veuillez télécharger une image au format JPEG ou PNG.',
'minWidth' => 200,
'maxWidth' => 4000,
'minHeight' => 200,
'maxHeight' => 4000,
'allowPortrait' => false,
'allowLandscape' => true,
]),
],
]);

Ce code impose que l'image soit en format JPEG ou PNG, avec une taille maximale de 5 Mo, et des dimensions spécifiques. Si une image ne respecte pas ces contraintes, un message d'erreur est affiché à l'utilisateur.

Validation de la Force du Mot de Passe

En plus de vérifier la longueur du mot de passe, il est possible de vérifier sa force en utilisant la contrainte PasswordStrength.

Exemple de Contrainte sur la Force du Mot de Passe

$builder->add('plainPassword', PasswordType::class, [
'mapped' => false,
'constraints' => [
new Assert\Length([
'min' => 6,
'minMessage' => 'Votre mot de passe doit comporter au moins {{ limit }} caractères.',
]),
new Assert\PasswordStrength([
'minScore' => 4,
'message' => 'Votre mot de passe est trop faible. Veuillez inclure des lettres, des chiffres et des symboles.',
]),
],
]);

Cette contrainte garantit que le mot de passe répond à un certain niveau de complexité, rendant l'application plus sécurisée.

Utilisation de Symfony UX Turbo pour la Validation AJAX

Symfony UX Turbo, activé par défaut depuis Symfony 6, permet de gérer les formulaires avec des requêtes AJAX. Si vous utilisez createView() dans votre render(), cela pourrait empêcher les messages d'erreur de s'afficher correctement. En supprimant createView(), Symfony UX Turbo peut gérer les validations et renvoyer des erreurs avec un statut 422, garantissant une meilleure expérience utilisateur.

Conclusion

Les contraintes de validation sont un élément crucial pour toute application web. Elles permettent de garantir la qualité des données et de prévenir les erreurs avant même qu'elles n'atteignent la base de données. En combinant les validations dans les entités et les formulaires, vous pouvez contrôler finement l'intégrité des données dans votre application Symfony.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.

10 - Validation des formulaires (Symfony 7)
Article publié le

Catégories : Symfony Symfony 7

Mots-clés : Symfony Formulaires donnees validation Symfony 7

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn