Les bases 4/6 : Validation des données

Tutoriels
Publié par William

La validation des données dans Laravel permet de contrôler les valeurs d’un formulaire.

Ainsi, son contenu sera interprété uniquement si l’utilisateur a respecté les règles qui le composent.

Sommaire

  1. Création du modèle
  2. Création du contrôleur
  3. Création des vues
  4. Validation des données
  5. Contrôle d’accès
  6. Tests

Création de la Form Request

Laravel permet d’étendre la classe Request et d’y incorporer les règles de validation spécifiques à un formulaire.

On dispose d’une commande pour générer la classe, que l’on va utiliser pour celle qui validera les informations liées à un restaurant :

php artisan make:request StoreRestaurantRequest

La classe App\Http\Requests\StoreRestaurantRequest créée contient 2 méthodes.

La méthode authorize qui permet de déterminer si un utilisateur est en droit de procéder à la validation du formulaire.

Ainsi que la méthode rules qui retourne un tableau contenant les règles de validation.

Dans un souci de responsabilisation du code, nous allons plutôt nous appuyer sur les Policies afin de déterminer les droits d’accès de l’utilisateur par conséquent nous n’utiliserons pas la méthode authorize en la faisant retourner true dans tous les cas.

Pour valider les informations d’un restaurant on va considérer qu’il faut répondre aux règles suivantes :

  • Le nom est requis
  • L’adresse est requise
  • Le type est requis et doit être l’une de ces options : Tradi , Italien ou Asiatique.

Ce qui se traduit dans le code part :

public function rules()
{
    return [
        'name' => 'required',
        'address' => 'required',
        'type' => ['required', Rule::in(['Italien', 'Tradi', 'Asiatique'])],
    ];
}

Utilisation au sein du contrôleur

Maintenant que l’on dispose de quoi valider nos données, nous allons utiliser tout le potentiel de la classe au sein du RestaurantController dans la méthode store.

public function store(StoreRestaurantRequest $request)
{
    $restaurant = Restaurant::make(
        $request->validated()
    );

    $request->user()->restaurants()->save(
        $restaurant
    );

    return redirect()->route('restaurants.show', $restaurant);
}

A noter qu’on injecte notre nouvelle classe en paramètre de la fonction en lieu et place de Request et nous utilisons la méthode validated de celle-ci qui contient un tableau des champs préalablement validés.

Aussi, étant donné que les formulaires de création et d’édition d’un restaurant sont les mêmes, nous allons appliquer notre classe de la même manière au sein de la méthode update :

public function update(StoreRestaurantRequest $request, Restaurant $restaurant)
{
    $restaurant->update(
        $request->validated()
    );

    return redirect()->route('restaurants.show', $restaurant);
}

Dans la plupart des cas il existera des différences, c’est à vous de voir si vous préférez créer une seule classe qui s’adapte à la création et à l’édition ou si vous préférez séparer les responsabilités.

En cas d’échec, informer l’utilisateur

C’est le double intérêt d’utiliser la validation : en cas d’échec, Laravel produit une variable automatiquement injecté dans la vue du formulaire qui contient les erreurs par champs !

Nous allons donc en faire bénéficier notre composant ìnput.blade.php, qui est utilisé pour la création des champs du formulaire, en lui permettant d’afficher l’erreur si elle existe en se basant sur son nom :

@props(['name'])

<input {{ $attributes }}/>
@error($name)
    <span style="color: red">{{ $message }}</span>
@enderror

C’est terminé pour ce tutoriel, nos formulaires sont consolidés !

Les sources de ce tutoriel sont disponibles sur ce dépôt.

Dans le prochain épisode…

Il est parfois utile de différencier les rôles et les droits de chacun, c’est ce que nous verrons dans le prochain article !