Validation des formulaires

Pour le moment, les données envoyées par l'utilisateur ne sont pas validées. Dans ce tutoriel, nous allons utiliser le système de validation de Laravel pour vérifier que les données envoyées sur notre formulaire d'inscription sont correctes.

Valider la requête

Laravel fournit une fonction validate() qui permet de valider une requête. Pour obtenir la requête de l'utilisateur, nous pouvons utiliser la fonction request() sans aucun paramètre. Puis nous pouvons appeler la fonction validate() qui prend en paramètre un tableau de règles.

Route::post('/inscription', function () {
    request()->validate([
        'email' => [],
        'password' => [],
        'password_confirmation' => [],
    ]);

    $utilisateur = App\Utilisateur::create([
        'email' => request('email'),
        'mot_de_passe' => bcrypt(request('password')),
    ]);

    return "Nous avons reçu votre email qui est " . request('email') . ' et votre mot de passe est ' . request('password');
});

Pour le moment, j'initialise des tableaux vides pour chaque champ du formulaire. Cela signifie que aucune règle n'est attendue.

Règles de validation

Les règles de validation disponibles par défaut sont décrites dans la documentation de Laravel. Je vous conseille de regarder les différentes possibilités, il y a de fortes chances pour que ce que vous cherchez soit déjà disponible.

Nous sommes intéressés par la règle required qui permet de vérifier que le champ est présent et non vide. Nous sommes également intéressé par la règle email pour vérifier que l'adresse envoyée par l'utilisateur est bien une adresse email.

Concernant le mot de passe, nous pouvons utiliser la règle confirmed qui permet de vérifier automatiquement que le champ foo et le champ foo_confirmation sont identique (dans notre cas foo est password et foo_confirmation est password_confirmation). Laravel ajoute simplement _confirmation au nom du champ.

Nous pouvons également ajouter une règle pour un minimum de caractères dans le mot de passe avec la règle min:value. Le :value est un paramètre pour la règle min qui nous permet de spécifier le nombre attendu. Dans notre cas, nous pouvons utiliser min:8 pour un mot de passe d'au moins 8 caractères.

Finallement, notre fonction de validation ressemble à :

request()->validate([
    'email' => ['required', 'email'],
    'password' => ['required', 'confirmed', 'min:8'],
    'password_confirmation' => ['required'],
]);

Si nous essayons maintenant d'envoyer le formulaire avec des données incorrects, nous sommes redirigés vers le formulaire et nous ne voyons plus d'erreur SQL.

Dans la prochaine vidéo, nous allons afficher les erreurs de validation dans notre vue pour que l'utilisateur puisse savoir quels étaient les problèmes.