Vous êtes sur la page 1sur 9

Laravel : Validation d’un formulaire à l’aide de la

classe FormRequest

Pourquoi devons-nous effectuer la validation des formulaires?

La règle générale est d’effectuer la validation de la demande de saisie.


Vous pouvez effectuer la validation côté client et serveur pour vous assurer
que vous ajoutez des données sûres à votre base de données.

Il est très important d’effectuer une validation de formulaire pour éviter


différents types de piratage par exemple:

 script inter-sites (cross-site scripting)

 injections de bases de données, etc.

Utiliser la validation fournie par le framework laravel est tellement plus


facile. Vous pouvez écrire votre propre validateur personnalisé ainsi que
vous pouvez utiliser les validateurs de formulaire intégrés de Laravel.

Comment fonctionne la validation des formulaires?

Par exemple, si vous avez un site Web de blog où votre utilisateur peut se
connecter et s’inscrire. Vous créez un formulaire de connexion et
d’inscription maintenant lorsque l’utilisateur entre les détails du formulaire et
soumet la demande au serveur principal.

Cette requête dans laravel va lancer une étape différente. Vérifions le flux
de requête :
Créer un formulaire de contact en utilisant laravel et valider les
données :
Pour comprendre le fonctionnement de la validation des laravels, il
faudrait créer un formulaire type et le valider. Disons que vous avez un
formulaire de contact sur votre site.
Vous voulez créer une page où vous voulez afficher le formulaire de
contact et ensuite effectuer la validation backend de laravel en utilisant
la classe request de laravel. Pour créer une page de contact, nous
devons suivre les instructions ci-dessous :
 Définir la route GET/contact-us pour afficher notre formulaire
 Définir la route POST/contact-us pour valider l’envoi de formulaire
 Créer ContactUsController avec des méthodes de création
(create) et de stockage (store)

Définir les routes pour notre nouvelle page

Ouvrons le fichier routes/web.php et ajoutons les routes suivantes :


<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::prefix('site')->group(function () {

// Route to show post form


Route::get('/contact-us', 'ContactUsController@create')->name('contact-
us');

// Route to submit form request


Route::post('/contact-us', 'ContactUsController@store')->name('contact-
us');
});

Maintenant que nous avons décidé quels seraient les routes pour notre
page de contact, nous devons pointer la route vers les méthodes de
contrôleur appropriées.

Lorsque l’utilisateur soumet le formulaire de contact, il ira à la méthode


store du contrôleur c’est là que nous devons effectuer notre validation de
formulaire. Par conséquent, nous créerions une classe de demande de
validation distincte pour notre méthode.

Ouvrez la fenêtre du terminal et créons un nouveau contrôleur en utilisant


la commande suivante :
# create controller for our routes
php artisan make:controller ContactUsController

# create request validation class for our submit method


php artisan make:request ContactFormRequest

Ouvrons notre controller et ajoutons le code suivant :


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Response;
use Illuminate\Http\RedirectResponse;
use App\Http\Requests\ContactFormRequest;

class ContactUsController extends Controller


{
public function create(): Response
{
return response()->view('contact-us');
}

public function store(ContactFormRequest $request): RedirectResponse


{
// get validated form data
$validatedData = $request->validated();

return response()
->redirectToRoute('contact-us') // redirect user to GET /contact-us page
->withErrors($request) // pass all validation errors
->withInput(); // pass form data
}
}

Voyons ce qui se passe dans chaque méthode :

GET /contact-us points vers la methode: ContactUsController@create

nous afficherions simplement le formulaire en utilisant notre vue contact-us

POST/contact-us points vers la méthode ContactUsController@store

ContactFormRequest est injecté en utilisant l’injection de dépendance à


notre méthode.

Laravel appelle la classe ContactFormRequest et effectue une validation de


formulaire basée sur les règles définies dans cette classe

Laravel appelle également la méthode authorize avant d’effectuer la


validation pour s’assurer que l’utilisateur a le droit d’accéder à cette page

Cette méthode fait fondamentalement la chose suivante

 effectue la validation
 redirige l’utilisateur vers la page de formulaire Contactez-us avec
toute erreur de formulaire ou les données de formulaire déjà
soumises

Enfin, nous devons créer une vue pour notre formulaire de contact. Créons
un fichier appelé contact-us.blade.php sous resources/views avec le
contenu suivant.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
* {box-sizing: border-box;}

input[type=text], textarea {
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-top: 6px;
margin-bottom: 16px;
resize: vertical;
}

input[type=submit] {
background-color: #04AA6D;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}

input[type=submit]:hover {
background-color: #45a049;
}

.container {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
margin: 0 auto;
width: 50%;
}
</style>
</head>
<body>

<div class="container">
<h3>Contact Form</h3>
<br>

<form method="POST" action="{{ route('contact-us') }}">


@csrf

@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif

<label for="email">Email</label>
<input type="text" id="email" name="email" placeholder="Your email address.."
value="{{ old('email') }}">

<label for="subject">Subject</label>
<input type="text" id="subject" name="subject" placeholder="Enter Subject for
contacting" value="{{ old('subject') }}">

<label for="comments">Comments</label>
<textarea id="comments" name="comments" placeholder="Write something.."
style="height:200px">{{ old('comments') }}</textarea>

<input type="submit" value="Submit">


</form>
</div>

</body>
</html>

La Classe ContactFormRequst

Maintenant, nous allons ouvrir le fichier nouvellement créé sous :


app/Http/Requests/ContactFormRequest.php class et ajouter les règles
suivantes :
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ContactFormRequest extends FormRequest


{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email',
'comments' => 'required|string|min:10',
'subject' => 'required|string|min:5|max:45',
];
}
}

Tester nos changements

Maintenant, que nous avons une route valide qui pointe vers des méthodes
de contrôleur valides et aussi que nous avons créé une classe séparée de
validation de formulaire, il est temps de tester nos changements. Ouvrez le
navigateur et cliquez sur page http://localhost/site/contact-us :
Qu’avons-nous appris dans ce TP ?
Comment créer une nouvelle route
comment lier une route à la méthode du contrôleur
comment créer une classe de validation distincte
classe de validation :
la méthode authorize : cette méthode est le meilleur endroit pour
vérifier si l’utilisateur est autorisé à accéder au formulaire ou non
méthode
rules : affiche la liste des champs de formulaire avec des règles pour
vérifier leur validation
Comment préremplir les données du formulaire avec les anciennes
données du formulaire envoyé  {{old (…) }} :

Remplissage des formulaires

Laravel fournit également un ancien assistant mondial. Si vous affichez une


ancienne entrée dans un modèle Blade, il est plus pratique d’utiliser
l’ancien helper pour remplir le formulaire.

L’ancienne méthode extrait les données d’entrée précédemment flashées


de la session :
<label for="email">Email</label>
<input type="text" id="email" name="email" placeholder="Your email address.."
value="{{ old('email') }}">

Méthodes de validation des formulaires Laravel par défaut

Si vous voulez explorer les règles disponibles que vous pouvez utiliser pour
effectuer la validation du formulaire, voir le site de Laravel .

Vous aimerez peut-être aussi