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
- Création du modèle
- Création du contrôleur
- Création des vues
- Validation des données
- Contrôle d’accès
- Les 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 :
1php 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éthodeauthorize
en la faisant retournertrue
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
ouAsiatique
.
Ce qui se traduit dans le code part :
1public function rules()2{3 return [4 'name' => 'required',5 'address' => 'required',6 'type' => ['required', Rule::in(['Italien', 'Tradi', 'Asiatique'])],7 ];8}
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
.
1public function store(StoreRestaurantRequest $request) 2{ 3 $restaurant = Restaurant::make( 4 $request->validated() 5 ); 6 7 $request->user()->restaurants()->save( 8 $restaurant 9 );10 11 return redirect()->route('restaurants.show', $restaurant);12}
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
:
1public function update(StoreRestaurantRequest $request, Restaurant $restaurant)2{3 $restaurant->update(4 $request->validated()5 );6 7 return redirect()->route('restaurants.show', $restaurant);8}
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 :
1@props(['name'])2 3<input {{ $attributes }}/>4@error($name)5 <span style="color: red">{{ $message }}</span>6@enderror
C’est terminé pour ce tutoriel, nos formulaires sont consolidés !
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 !
Source : https://github.com/laravel-fr/support-les-bases/tree/v4
A lire
Autres articles de la même catégorie
Tour d'horizon des dataproviders
Améliorons nos tests avec les dataProvider !
Mathieu De Gracia
Quelques tips pour phpunit #1
Quelques tips pour améliorer vos performances et votre confort d’utilisation de phpunit.
Mathieu De Gracia
Une architecture modulaire en Laravel
Comment appliquer une architecture modulaire à un projet Laravel.
Mathieu De Gracia