Personnaliser nos messages d'erreur

Dans ce tutoriel, nous allons traduire les messages d'erreur de base de Laravel et créer un message d'erreur spécifique.

Fichiers de langues

Laravel utilise son système de traduction pour afficher les messages d'erreur des règles par défaut. Les fichiers de traduction sont situés dans ressources/lang. Dans ce dossier nous avons un dossier par langue, pour le moment, seul le dossier en est présent. Dans le dossier nous avons plusieurs fichiers mais celui qui nous intéresse est le fichier validation.php.

Nous pourrions modifier directement le fichier ressources/lang/en/validation.php mais la bonne pratique est de créer un nouveau dossier fr avant de changer les textes. Nous pouvons donc dupliquer le dossier en en fr avec Atom. Puis modifier le fichier ressources/lang/fr/validation.php.

Dans ce fichier, chaque clé correspond à une règle de validation. Nous pouvons donc modifier les clés required, email, confirmed et min. Je n'utilise que très rarement la variable :attribute qui est remplacée par le nom du champ car mes champs sont souvent écris en anglais (comme "password" dans notre application).

Pour la clé min, nous avons un sous-tableau en fonction du type de données car la règle min fonctionne pour les chiffres, les fichiers, les chaînes de caractères et les tableaux. Nous pouvons donc remplacer la sous-clé string dans notre cas. Nous pouvons également utiliser la variable :min qui sera remplacé par le paramètre de la règle min (8 dans notre cas).

Configuration de la langue de l'application

Si nous réactualisons notre formulaire maintenant, les messages sont toujours en anglais. C'est parce que notre application est toujours en langue anglaise par défaut. Pour changer ça, nous pouvons aller dans le fichier de configuration config/app.php et changer la clé locale en fr.

Les messages d'erreur devraient maintenant s'afficher en français.

Message d'erreur spécifique

Il est également possible de créer un message d'erreur spécifique pour un formulaire. Pour cela, la fonction validate prend un tableau de messages en deuxième paramètre.

Par exemple, pour modifier le message de ce formulaire du champ password pour la règle min, nous pouvons lui passer une clé password.min :

request()->validate([
    'email' => ['required', 'email'],
    'password' => ['required', 'confirmed', 'min:8'],
    'password_confirmation' => ['required'],
], [
    'password.min' => 'Pour des raisons de sécurité, votre mot de passe doit faire :min caractères.'
]);

Essayez de vous inscrire avec un mot de passe inférieur à 8 caractères pour voir le nouveau message d'erreur.