Vous êtes sur la page 1sur 5

LaraGuide → Créer un formulaire

Créer un formulaire
Dans ce tutoriel nous allons créer les bases d'un formulaire
d'inscription avec Laravel.

Ajout d'une nouvelle route pour le formulaire HTML


Afin d'afficher le formulaire HTML, nous avons besoin de créer une
nouvelle route avec une nouvelle vue.
Route::get ('/inscription', function () {
return view('inscription');
});

@extends('layout')

@section('contenu')
<form action="/inscription" method="post">
<input type="email" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Mot de passe">
<input type="password" name="password_confirmation" placeholder="Mot de
passe (confirmation)">
<input type="submit" value="M'inscrire">
</form>
@endsection

Le formulaire HTML est très classique. Je le redirige vers l'URL


/inscription avec une méthode HTTP POST.
Lorsque nous essayons de valider ce formulaire, nous obtenons une
erreur de type MethodNotAllowedHttpException. Pourquoi ?
Ajout d'une nouvelle route pour traiter le formulaire
L'URL /inscription existe déjà dans notre fichier routes/web.php
mais la route existante ne répond qu'aux requêtes de type GET. Or,
notre formulaire envoie une requête de type POST. Pour créer une
route répondant au type POST, rien de plus simple :
Route::post('/inscription', function () {
return 'Formulaire reçu';
});

Lorsque nous renvoyons à nouveau le formulaire, une nouvelle


erreur s'affiche « This page has expired due to inactivity ».

Le problème du CSRF
Le CSRF est un type d'attaque très répandu sur le web. Laravel nous
protège par défaut de ces attaques dans nos formulaires. Mais pour
prévenir Laravel que notre formulaire est sécurisé, nous avons
besoin d'ajouter une ligne dans notre HTML :
@extends('layout')

@section('contenu')
<form action="/inscription" method="post">
{{ csrf_field() }}

<input type="email" name="email" placeholder="Email">


<input type="password" name="password" placeholder="Mot de passe">
<input type="password" name="password_confirmation" placeholder="Mot de
passe (confirmation)">
<input type="submit" value="M'inscrire">
</form>
@endsection
Via la ligne csrf_field(), Laravel va ajouter un champ caché à notre
formulaire (de type hidden) contenant une chaîne de caractères
aléatoires. Et ce champ va lui permettre de protéger notre
formulaire automatiquement contre les attaques de type CSRF.
Nous verrons dans une future vidéo comment cette attaque peut
être exploité et pourquoi nous devons ajouter cette ligne à nos
formulaires.
En entrant à nouveau les données dans notre formulaire, cette fois
ci tout fonctionne !

Récupération des données envoyées


Nous pouvons récupérer les données envoyées par le visiteur via la
méthode PHP traditionnelle :
Route::post('/inscription', function () {
return 'Votre email est ' . $_POST['email'];
});

Nous pouvons également utiliser la méthode Laravel que vous


connaissez déjà et qui permet de récupérer non seulement les
paramètres de type GET, les paramètres des URLs mais aussi les
paramètres de type POST : la fonction request().
Route::post('/inscription', function () {
return 'Votre email est ' . request('email');
});

Dans la suite de ce guide, nous allons devoir enregistrer l'inscription


des utilisateurs en base de données. Pour cela, dans les prochains
tutoriels, nous allons créer et configurer notre base de données.
Inscrivez-vous à la newsletter pour recevoir chaque semaine un
condensé d'informations sur Laravel : nouveautés du framework,
vidéos explicatives, tutoriels et bien plus encore !
Toujours pas convaincu ? Lisez les précédentes éditions !

 <br>
    <div class="container">
        <div class="row card text-white bg-dark">
            <h4 class="card-header">Contacteez-moi</h4>
            <div class="card-body">
                <form action="{{ url('contact) }}" method="post">
                    {{ csrf_field() }}
                    <div class="form-group">
                        <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="form-group">
                        <input type="email" class="form-control @error('email') is-
invalid @enderror" name="email" id="email" placeholder="Votre email" value="{{ old('em
ail') }}">
                            @error
                                <div class="invalid-feedback">
                                    {{ $message }}
                                </div>
                            @enderror
                    </div>
                    <div class="form-group">
                        <textarea class="form-control @error('message') is-invalid @en
derror" name="message" id="message" placeholder="Votre message">
                            {{ $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>

Vous aimerez peut-être aussi