1/15
16 février 2023
Cours Laravel 10 – les bases – la validation
laravel.sillo.org/cours-laravel-10-les-bases-la-validation/
Nous avons vu dans le chapitre précédent un scénario mettant en œuvre un formulaire.
Nous n’avons imposé aucune contrainte sur les valeurs transmises. Dans une application
réelle, il est toujours nécessaire de vérifier que ces valeurs correspondent à ce qu’on attend.
Par exemple un nom doit comporter uniquement des caractères alphabétiques et avoir une
longueur maximale ou minimale, une adresse email doit correspondre à un certain format…
Il faut donc mettre en place des règles de validation. En général on procède à une première
validation côté client pour éviter de faire des allers-retours avec le serveur. Mais quelle que
soit la pertinence de cette validation côté client elle n’exonère pas d’une validation côté
serveur.
On ne doit jamais faire confiance à des données qui arrivent sur le serveur !
Dans l’exemple de ce chapitre je ne prévoirai pas de validation côté client, d’une part ce
n’est pas mon propos, d’autre part elle masquerait la validation côté serveur pour les tests.
Scénario et routes
Voici le scénario que je vous propose pour ce chapitre :
2/15
1. le client demande le formulaire de contact,
2. le contrôleur génère le formulaire,
3. le contrôleur envoie le formulaire,
4. le client remplit le formulaire et le soumet,
5. le contrôleur teste la validité des informations et là on a deux possibilités :
en cas d’échec on renvoie le formulaire au client en l’informant des erreurs et en
conservant ses entrées correctes,
en cas de réussite on envoie un message de confirmation au client .
Le contrôleur
On va encore utiliser Artisan pour générer le contrôleur :
3/15
php artisan make:controller ContactController
Modifiez le code par défaut pour en arriver à celui-ci :
<?php
namespace AppHttpControllers;
class ContactController extends Controller
{
public function create()
{
return 'vue contact';
}
public function store()
{
return 'vue confirm';
}
}
La méthode create ne présente aucune nouveauté par rapport à ce qu’on a vu au chapitre
précédent. On se contentera de renvoyer la vue contact qui comporte le formulaire.
C’est dans la méthode store qu’on traitera le formulaire.
Routes
On va donc avoir besoin de 2 routes :
use AppHttpControllersContactController;
Route::get('contact', [ContactController::class, 'create']);
Route::post('contact', [ContactController::class, 'store']);
On aura une seule url (avec verbe « get » pour demander le formulaire et verbe « post »
pour le soumettre) :
http://monsite.fr/contact
Vérifiez avec la commande php artisan route:list que tout est correct :
4/15
On a bien nos deux routes avec l’url correct, le bon contrôleur avec les méthodes prévues et
le middleware web appliqué aux deux routes.
La requête de formulaire
Il y a plusieurs façons d’effectuer la validation avec Laravel mais la plus simple et élégante
consiste à utiliser une requête de formulaire (Form request).
Nous avons déjà utilisé Artisan qui permet d’effectuer de nombreuses opérations et nous
allons encore avoir besoin de lui pour créer une requête de formulaire :
php artisan make:request ContactRequest
5/15
Comme par défaut le dossier n’existe pas il est créé en même temps que la classe :
Voyons le code généré :
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ContactRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this
request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string,
IlluminateContractsValidationRule|array|string>
*/
public function rules(): array
{
return [
//
];
}
}
La classe générée comporte 2 méthodes :
authorize : pour effectuer un contrôle de sécurité éventuel sur l’identité ou les droits de
l’émetteur,
rules : pour les règles de validation.
On va arranger le code pour notre cas :
6/15
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ContactRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, IlluminateContractsValidationRule|array|string>
*/
public function rules(): array
{
return [
'nom' => 'bail|required|between:5,20|alpha',
'email' => 'bail|required|email',
'message' => 'bail|required|max:250'
];
}
}
Au niveau de la méthode rules on retourne un tableau qui contient des clés qui
correspondent aux champs du formulaire. Vous retrouvez le nom, l’email et le message. Les
valeurs contiennent les règles de validation. Comme il y en a chaque fois plusieurs elles sont
séparées par le signe « | ». Voyons les différentes règles prévues :
bail : on arrête de vérifier dès qu’une règle n’est pas respectée,
required : une valeur est requise, donc le champ ne doit pas être vide,
between : nombre de caractères entre une valeur minimale et une valeur maximale,
alpha : on n’accepte que les caractères alphabétiques,
email : la valeur doit être une adresse email valide.
Au niveau de la méthode authorize je me suis contenté de renvoyer true parce que nous ne
ferons pas de contrôle supplémentaire à ce niveau.
Vous pouvez trouver toutes les règles disponibles dans la documentation. Vous verrez que
la liste est longue !
On va utiliser cette requête de formulaire dans notre contrôleur :
7/15
<?php
...
use AppHttpRequestsContactRequest;
class ContactController extends Controller
{
...
public function store(ContactRequest $request)
{
...
}
}
Les vues
Le template
Pour ce chapitre je vais créer un template réaliste avec l’utilisation de Bootstrap pour alléger
le code. Voici le code de ce template (resources/views/template.blade.php) :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mon joli site</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet">
<style>
textarea { resize: none; }
.card { width: 25em; }
</style>
</head>
<body>
@yield('contenu')
</body>
</html>
J’ai prévu l’emplacement @yield nommé « contenu » pour recevoir les pages du site, pour
notre exemple on aura seulement la page de contact et celle de la confirmation.
La vue de contact
La vue de contact va contenir essentiellement un formulaire
(resources/views/contact.blade.php) :
8/15
@extends('template')
@section('contenu')
<br>
<div class="container">
<div class="row card text-white bg-dark">
<h4 class="card-header">Contactez-moi</h4>
<div class="card-body">
<form action="{{ url('contact') }}" method="POST">
@csrf
<div class="mb-3">
<input type="text" class="form-control @error('nom') is-
invalid @enderror" name="nom" id="nom" placeholder="Votre nom" value="{{ old('nom')
}}">
@error('nom')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<input type="email" class="form-control @error('email') is-
invalid @enderror" name="email" id="email" placeholder="Votre email" value="{{
old('email') }}">
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<textarea class="form-control @error('message') is-invalid
@enderror" name="message" id="message" placeholder="Votre message">{{ old('message')
}}</textarea>
@error('message')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<button type="submit" class="btn btn-secondary">Envoyer !
</button>
</form>
</div>
</div>
</div>
@endsection
Cette vue étend le template vu ci-dessus et renseigne la section « contenu ». Je ne
commente pas la mise en forme spécifique à Bootstrap.
En cas de réception du formulaire suite à des erreurs on reçoit une variable $errors qui
contient un tableau avec comme clés les noms des contrôles et comme valeurs les textes
identifiant les erreurs.
La variable $errors est générée systématiquement pour toutes les vues.
9/15
On pourrait accéder à cette variable et faire un traitement spécifique pour afficher des
erreurs mais Blade nous propose une possibilité plus élégante avec la directive @error.
Enfin en cas d’erreur de validation les anciennes valeurs saisies sont retournée au
formulaire et récupérées avec l’helper old :
value="{{ old('nom') }}"
Dans le contrôleur on va changer le code pour retourner cette vue :
use IlluminateViewView;
class ContactController extends Controller
{
public function create(): View
{
return view('contact');
}
Au départ le formulaire se présentera ainsi :
Après une soumission et renvoi avec des erreurs il pourra se présenter ainsi :
10/15
Les messages en français
Par défaut les messages sont en anglais. Pour avoir ces textes en français vous devez
utiliser le package ici.
Pour faire les choses simplement commencez par cette installation :
composer require laravel-lang/common --dev
Puis intallez le français :
php artisan lang:add fr
php artisan lang:update
Vous devriez obtenir ceci :
Ensuite changez cette ligne dans le fichier config/app.php :
'locale' => 'fr',
Vous devriez avoir vos messages en français :
11/15
La vue de confirmation
Pour la vue de confirmation (resources/views/confirm.blade.php) le code est plus simple
et on utilise évidemment le même template :
@extends('template')
@section('contenu')
<br>
<div class="container">
<div class="row card text-white bg-dark">
<h4 class="card-header">Contactez-moi</h4>
<div class="card-body">
<p class="card-text">Merci. Votre message a été transmis à
l'administrateur du site. Vous recevrez une réponse rapidement.</p>
</div>
</div>
</div>
@endsection
On modifie le code du contrôleur pour renvoyer cette vue :
12/15
class ContactController extends Controller
{
...
public function store(ContactRequest $request): View
{
return view('confirm');
}
}
Ce qui donne cette apparence :
D’autre façons d’effectuer la validation
Si vous n’appréciez pas les requêtes de formulaire et leur côté « magique » vous pouvez
effectuer la validation directement dans le contrôleur avec la méthode validate. Voici le
contrôleur modifié en conséquence :
13/15
<?php
namespace AppHttpControllers;
use IlluminateViewView;
use IlluminateHttpRequest;
class ContactController extends Controller
{
public function create(): View
{
return view('contact');
}
public function store(Request $request): View
{
$this->validate($request, [
'nom' => 'bail|required|between:5,20|alpha',
'email' => 'bail|required|email',
'message' => 'bail|required|max:250'
]);
return view('confirm');
}
}
Cette fois on injecte dans la méthode store directement la requête
(IlluminateHttpRequest). Le fonctionnement est exactement le même.
Si cette méthode validate est encore trop abstraite à votre goût vous pouvez détailler les
opérations :
14/15
<?php
namespace AppHttpControllers;
<br />use IlluminateViewView;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class ContactController extends Controller
{
public function create(): View
{
return view('contact');
}
public function store(Request $request): View
{
$validator = Validator::make($request->all(), [
'nom' => 'bail|required|between:5,20|alpha',
'email' => 'bail|required|email',
'message' => 'bail|required|max:250'
]);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
return view('confirm');
}
}
On utilise la façade Validator en précisant toutes les entrée ($request->all()) et les règles
de validation. Ensuite si la validation échoue (fails) on renvoie (back) le formulaire avec les
erreurs (withErrors) et les valeurs entrées (withInput) pour pouvoir les afficher dans le
formulaire.
Mais pourquoi se compliquer la vie quand on dispose de fonctionnalités plus simples et
élégantes ?
En résumé
La validation est une étape essentielle de vérification des entrées du client.
On dispose de nombreuses règles de validation.
Le validateur génère des erreurs explicites à afficher au client.
Pour avoir les textes des erreurs en français il faut aller chercher les traductions et les
placer dans le bon dossier.
Les requêtes de formulaires (Form request) permettent d’effectuer la validation de
façon simple et élégante.
15/15
Il y a plusieurs façons d’effectuer la validation à adapter selon les goûts‌et les
circonstances.

Contenu connexe

PDF
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
DOCX
How to remove disable and cancel shipment functionality in enter purchase or...
PPTX
Laravel 9 comprendre les fondamentaux.
PDF
Android-Tp2: liste et adaptateurs
PPTX
REST & SOAP.pptx
PPT
RESTful services
PDF
Maven et industrialisation du logiciel
PPTX
Node.js Event Emitter
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
How to remove disable and cancel shipment functionality in enter purchase or...
Laravel 9 comprendre les fondamentaux.
Android-Tp2: liste et adaptateurs
REST & SOAP.pptx
RESTful services
Maven et industrialisation du logiciel
Node.js Event Emitter

Tendances (20)

PDF
Support de Cours JSF2 Première partie Intégration avec Spring
PPTX
Chp3 - Les Services Web
PPTX
Modele mvc
PDF
cours-adressage-ip+annexes.pdf
PPTX
Chp1- Introduction aux Technologies Web et SOA
PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
PPTX
Introduction aux web services
PDF
Création de Services et Configuration du ESB avec TalendESB
PPTX
Laravel introduction
PDF
eServices-Tp1: Web Services
PPTX
Les plateformes de développement des web services
PDF
Talend ESB : Monitoring, Repartition de Charge et Authentification
DOCX
Setup of budget in oracle
PPT
PDF
React-cours.pdf
PDF
Java com banco my sql
PDF
Rapport de mini projet de programation web
ODP
Introduction to Ansible
PPTX
Laravel
PPTX
Rest api and-crud-api
Support de Cours JSF2 Première partie Intégration avec Spring
Chp3 - Les Services Web
Modele mvc
cours-adressage-ip+annexes.pdf
Chp1- Introduction aux Technologies Web et SOA
Support Web Services SOAP et RESTful Mr YOUSSFI
Introduction aux web services
Création de Services et Configuration du ESB avec TalendESB
Laravel introduction
eServices-Tp1: Web Services
Les plateformes de développement des web services
Talend ESB : Monitoring, Repartition de Charge et Authentification
Setup of budget in oracle
React-cours.pdf
Java com banco my sql
Rapport de mini projet de programation web
Introduction to Ansible
Laravel
Rest api and-crud-api
Publicité

Similaire à laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf (20)

PPTX
ch3 - Laravel - Les bases de la pres.pptx
PDF
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
PPT
Spring MVC
PDF
Crud+tutorial+fr
PPT
Soutenance Zend Framework vs Symfony
PDF
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
PPTX
Web dev open door
PDF
Mpdf 9
PPTX
Marzouk jsp
PDF
Utilisation d'une api web avec asp
PDF
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
PPTX
11. Autorisations.pptx
PPT
Presentation Spring, Spring MVC
PDF
test-formulaire-angular.pdf
PPTX
Introduction à Symfony
PDF
04-Collaboration-JSP-Sebfbfhhfufucrvlet.pdf
PDF
Spring Ioc.pdf
PPT
Introductions Aux Servlets
PDF
Rapport tp3 j2ee
PDF
ch5 - Le CRUD avec Laravel , aaa aaa aaa
ch3 - Laravel - Les bases de la pres.pptx
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
Spring MVC
Crud+tutorial+fr
Soutenance Zend Framework vs Symfony
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Web dev open door
Mpdf 9
Marzouk jsp
Utilisation d'une api web avec asp
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
11. Autorisations.pptx
Presentation Spring, Spring MVC
test-formulaire-angular.pdf
Introduction à Symfony
04-Collaboration-JSP-Sebfbfhhfufucrvlet.pdf
Spring Ioc.pdf
Introductions Aux Servlets
Rapport tp3 j2ee
ch5 - Le CRUD avec Laravel , aaa aaa aaa
Publicité

laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf

  • 1. 1/15 16 février 2023 Cours Laravel 10 – les bases – la validation laravel.sillo.org/cours-laravel-10-les-bases-la-validation/ Nous avons vu dans le chapitre précédent un scénario mettant en œuvre un formulaire. Nous n’avons imposé aucune contrainte sur les valeurs transmises. Dans une application réelle, il est toujours nécessaire de vérifier que ces valeurs correspondent à ce qu’on attend. Par exemple un nom doit comporter uniquement des caractères alphabétiques et avoir une longueur maximale ou minimale, une adresse email doit correspondre à un certain format… Il faut donc mettre en place des règles de validation. En général on procède à une première validation côté client pour éviter de faire des allers-retours avec le serveur. Mais quelle que soit la pertinence de cette validation côté client elle n’exonère pas d’une validation côté serveur. On ne doit jamais faire confiance à des données qui arrivent sur le serveur ! Dans l’exemple de ce chapitre je ne prévoirai pas de validation côté client, d’une part ce n’est pas mon propos, d’autre part elle masquerait la validation côté serveur pour les tests. Scénario et routes Voici le scénario que je vous propose pour ce chapitre :
  • 2. 2/15 1. le client demande le formulaire de contact, 2. le contrôleur génère le formulaire, 3. le contrôleur envoie le formulaire, 4. le client remplit le formulaire et le soumet, 5. le contrôleur teste la validité des informations et là on a deux possibilités : en cas d’échec on renvoie le formulaire au client en l’informant des erreurs et en conservant ses entrées correctes, en cas de réussite on envoie un message de confirmation au client . Le contrôleur On va encore utiliser Artisan pour générer le contrôleur :
  • 3. 3/15 php artisan make:controller ContactController Modifiez le code par défaut pour en arriver à celui-ci : <?php namespace AppHttpControllers; class ContactController extends Controller { public function create() { return 'vue contact'; } public function store() { return 'vue confirm'; } } La méthode create ne présente aucune nouveauté par rapport à ce qu’on a vu au chapitre précédent. On se contentera de renvoyer la vue contact qui comporte le formulaire. C’est dans la méthode store qu’on traitera le formulaire. Routes On va donc avoir besoin de 2 routes : use AppHttpControllersContactController; Route::get('contact', [ContactController::class, 'create']); Route::post('contact', [ContactController::class, 'store']); On aura une seule url (avec verbe « get » pour demander le formulaire et verbe « post » pour le soumettre) : http://monsite.fr/contact Vérifiez avec la commande php artisan route:list que tout est correct :
  • 4. 4/15 On a bien nos deux routes avec l’url correct, le bon contrôleur avec les méthodes prévues et le middleware web appliqué aux deux routes. La requête de formulaire Il y a plusieurs façons d’effectuer la validation avec Laravel mais la plus simple et élégante consiste à utiliser une requête de formulaire (Form request). Nous avons déjà utilisé Artisan qui permet d’effectuer de nombreuses opérations et nous allons encore avoir besoin de lui pour créer une requête de formulaire : php artisan make:request ContactRequest
  • 5. 5/15 Comme par défaut le dossier n’existe pas il est créé en même temps que la classe : Voyons le code généré : <?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; class ContactRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { return false; } /** * Get the validation rules that apply to the request. * * @return array<string, IlluminateContractsValidationRule|array|string> */ public function rules(): array { return [ // ]; } } La classe générée comporte 2 méthodes : authorize : pour effectuer un contrôle de sécurité éventuel sur l’identité ou les droits de l’émetteur, rules : pour les règles de validation. On va arranger le code pour notre cas :
  • 6. 6/15 <?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; class ContactRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { return true; } /** * Get the validation rules that apply to the request. * * @return array<string, IlluminateContractsValidationRule|array|string> */ public function rules(): array { return [ 'nom' => 'bail|required|between:5,20|alpha', 'email' => 'bail|required|email', 'message' => 'bail|required|max:250' ]; } } Au niveau de la méthode rules on retourne un tableau qui contient des clés qui correspondent aux champs du formulaire. Vous retrouvez le nom, l’email et le message. Les valeurs contiennent les règles de validation. Comme il y en a chaque fois plusieurs elles sont séparées par le signe « | ». Voyons les différentes règles prévues : bail : on arrête de vérifier dès qu’une règle n’est pas respectée, required : une valeur est requise, donc le champ ne doit pas être vide, between : nombre de caractères entre une valeur minimale et une valeur maximale, alpha : on n’accepte que les caractères alphabétiques, email : la valeur doit être une adresse email valide. Au niveau de la méthode authorize je me suis contenté de renvoyer true parce que nous ne ferons pas de contrôle supplémentaire à ce niveau. Vous pouvez trouver toutes les règles disponibles dans la documentation. Vous verrez que la liste est longue ! On va utiliser cette requête de formulaire dans notre contrôleur :
  • 7. 7/15 <?php ... use AppHttpRequestsContactRequest; class ContactController extends Controller { ... public function store(ContactRequest $request) { ... } } Les vues Le template Pour ce chapitre je vais créer un template réaliste avec l’utilisation de Bootstrap pour alléger le code. Voici le code de ce template (resources/views/template.blade.php) : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Mon joli site</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"> <style> textarea { resize: none; } .card { width: 25em; } </style> </head> <body> @yield('contenu') </body> </html> J’ai prévu l’emplacement @yield nommé « contenu » pour recevoir les pages du site, pour notre exemple on aura seulement la page de contact et celle de la confirmation. La vue de contact La vue de contact va contenir essentiellement un formulaire (resources/views/contact.blade.php) :
  • 8. 8/15 @extends('template') @section('contenu') <br> <div class="container"> <div class="row card text-white bg-dark"> <h4 class="card-header">Contactez-moi</h4> <div class="card-body"> <form action="{{ url('contact') }}" method="POST"> @csrf <div class="mb-3"> <input type="text" class="form-control @error('nom') is- invalid @enderror" name="nom" id="nom" placeholder="Votre nom" value="{{ old('nom') }}"> @error('nom') <div class="invalid-feedback">{{ $message }}</div> @enderror </div> <div class="mb-3"> <input type="email" class="form-control @error('email') is- invalid @enderror" name="email" id="email" placeholder="Votre email" value="{{ old('email') }}"> @error('email') <div class="invalid-feedback">{{ $message }}</div> @enderror </div> <div class="mb-3"> <textarea class="form-control @error('message') is-invalid @enderror" name="message" id="message" placeholder="Votre message">{{ old('message') }}</textarea> @error('message') <div class="invalid-feedback">{{ $message }}</div> @enderror </div> <button type="submit" class="btn btn-secondary">Envoyer ! </button> </form> </div> </div> </div> @endsection Cette vue étend le template vu ci-dessus et renseigne la section « contenu ». Je ne commente pas la mise en forme spécifique à Bootstrap. En cas de réception du formulaire suite à des erreurs on reçoit une variable $errors qui contient un tableau avec comme clés les noms des contrôles et comme valeurs les textes identifiant les erreurs. La variable $errors est générée systématiquement pour toutes les vues.
  • 9. 9/15 On pourrait accéder à cette variable et faire un traitement spécifique pour afficher des erreurs mais Blade nous propose une possibilité plus élégante avec la directive @error. Enfin en cas d’erreur de validation les anciennes valeurs saisies sont retournée au formulaire et récupérées avec l’helper old : value="{{ old('nom') }}" Dans le contrôleur on va changer le code pour retourner cette vue : use IlluminateViewView; class ContactController extends Controller { public function create(): View { return view('contact'); } Au départ le formulaire se présentera ainsi : Après une soumission et renvoi avec des erreurs il pourra se présenter ainsi :
  • 10. 10/15 Les messages en français Par défaut les messages sont en anglais. Pour avoir ces textes en français vous devez utiliser le package ici. Pour faire les choses simplement commencez par cette installation : composer require laravel-lang/common --dev Puis intallez le français : php artisan lang:add fr php artisan lang:update Vous devriez obtenir ceci : Ensuite changez cette ligne dans le fichier config/app.php : 'locale' => 'fr', Vous devriez avoir vos messages en français :
  • 11. 11/15 La vue de confirmation Pour la vue de confirmation (resources/views/confirm.blade.php) le code est plus simple et on utilise évidemment le même template : @extends('template') @section('contenu') <br> <div class="container"> <div class="row card text-white bg-dark"> <h4 class="card-header">Contactez-moi</h4> <div class="card-body"> <p class="card-text">Merci. Votre message a été transmis à l'administrateur du site. Vous recevrez une réponse rapidement.</p> </div> </div> </div> @endsection On modifie le code du contrôleur pour renvoyer cette vue :
  • 12. 12/15 class ContactController extends Controller { ... public function store(ContactRequest $request): View { return view('confirm'); } } Ce qui donne cette apparence : D’autre façons d’effectuer la validation Si vous n’appréciez pas les requêtes de formulaire et leur côté « magique » vous pouvez effectuer la validation directement dans le contrôleur avec la méthode validate. Voici le contrôleur modifié en conséquence :
  • 13. 13/15 <?php namespace AppHttpControllers; use IlluminateViewView; use IlluminateHttpRequest; class ContactController extends Controller { public function create(): View { return view('contact'); } public function store(Request $request): View { $this->validate($request, [ 'nom' => 'bail|required|between:5,20|alpha', 'email' => 'bail|required|email', 'message' => 'bail|required|max:250' ]); return view('confirm'); } } Cette fois on injecte dans la méthode store directement la requête (IlluminateHttpRequest). Le fonctionnement est exactement le même. Si cette méthode validate est encore trop abstraite à votre goût vous pouvez détailler les opérations :
  • 14. 14/15 <?php namespace AppHttpControllers; <br />use IlluminateViewView; use IlluminateHttpRequest; use IlluminateSupportFacadesValidator; class ContactController extends Controller { public function create(): View { return view('contact'); } public function store(Request $request): View { $validator = Validator::make($request->all(), [ 'nom' => 'bail|required|between:5,20|alpha', 'email' => 'bail|required|email', 'message' => 'bail|required|max:250' ]); if ($validator->fails()) { return back()->withErrors($validator)->withInput(); } return view('confirm'); } } On utilise la façade Validator en précisant toutes les entrée ($request->all()) et les règles de validation. Ensuite si la validation échoue (fails) on renvoie (back) le formulaire avec les erreurs (withErrors) et les valeurs entrées (withInput) pour pouvoir les afficher dans le formulaire. Mais pourquoi se compliquer la vie quand on dispose de fonctionnalités plus simples et élégantes ? En résumé La validation est une étape essentielle de vérification des entrées du client. On dispose de nombreuses règles de validation. Le validateur génère des erreurs explicites à afficher au client. Pour avoir les textes des erreurs en français il faut aller chercher les traductions et les placer dans le bon dossier. Les requêtes de formulaires (Form request) permettent d’effectuer la validation de façon simple et élégante.
  • 15. 15/15 Il y a plusieurs façons d’effectuer la validation à adapter selon les goûts‌et les circonstances.