Comment créer un formulaire avec Laravel

Avatar de Benjamin Crozat.

Publié le par Benjamin Crozat

Temps de lecture estimé : 2 minutes

L'avantage de Laravel, c'est de pouvoir écrire du code simple et concis. Ici, nous allons voir comment créer un formulaire sans fioritures.

Être capable de récolter l’entrée d’un utilisateur sur un site web est primordial. Il y a tout un tas de cas d’usages pour ça :

  • L’authentification d’un utilisateur ;
  • Un panneau d’administration qui permet de poster des articles ;
  • Poster des commentaires ;
  • Etc.

Afin d’être capable de suivre ce tutoriel, je vous recommande d’être au point avec les routes en allant lire “Le routing avec Laravel : créez votre première route”.

Création des routes

Dans routes/web.php, créons la route permettant d’afficher le formulaire.
On utilisera la méthode Route::view(), permettant de directement lier une vue à une page. Pourquoi ? Cela nous permet d’écrire moins de code. Donc, plutôt que d’écrire ceci :

Route::get('/mon-super-formulaire', function () {
return view('mon-super-formulaire');
});

On écrira ça :

Route::view('/mon-super-formulaire', 'mon-super-formulaire');

Ensuite, déclarons la route permettant de traiter les données envoyées par l’utilisateur à travers le formulaire. La particularité, c’est que le navigateur doit envoyer une requête POST à notre site. Nous allons donc faire en sorte que la route réponde à cette méthode HTTP :

Route::post('/mon-super-formulaire', function () {
// C'est ici qu'on écrira le code.
});

Création de la vue Blade

Nous avons déjà créé la route permettant d’afficher le contenu de la vue mon-super-formulaire. Mais jusqu’à maintenant, elle renvoyait une erreur car elle n’existait pas. Corrigeons ça sans attendre.

touch resources/views/mon-super-formulaire.blade.php

Dans ce nouveau fichier, ajoutez le code Blade suivant :

<form
{{-- Notez l'utilisation de "POST". --}}
method="POST"
action="/mon-super-formulaire"
>
{{-- La directive "csrf" permet de se protéger des attaques CSRF.
Il s'agit d'un très vaste sujet, alors partons du principe
qu'elle est requise dans chacun de vos formulaires. --}}
@csrf
 
<input type="text" name="nom" />
 
<button type="submit">
Envoyer
</button>
</form>

Traitement et affichage des données

Déterminons ce qui nous reste à faire pour la route vide définie ci-dessous :

  • Récupérer les données ;
  • Valider les données ;
  • Afficher les données.

Par “données”, comprenez “nom de notre utilisateur”.

// Cette fois, on utilise la méthode HTTP "POST".
Route::post('/traitement-de-mon-super-formulaire', function () {
// Assurons-nous que ce que saisi l'utilisateur :
// - N'est pas vide ;
// - Fait plus de 3 caractères ;
// - Ne fait pas plus de 255 caractères.
//
// Signalons au passage que l'utilisateur a saisi "Homer" dans le formulaire.
$input = request()->validate([
'nom' => ['required', 'min:3', 'max:255'],
]);
 
// Pour terminer, on affiche "Bonjour, Homer !";
return 'Bonjour, ' . $input['nom'] . ' !';
});

Après ça, l’idéal serait d’ajouter l’attribut required dans le champ du formulaire afin d’avoir une validation aussi bien dans le front-end que le back-end :

<input type="text" name="nom" required />

Il est désormais impossible d’envoyer le formulaire sans l’avoir rempli avant. Nous avons maintenant un formulaire parfaitement fonctionnel.

À vous maintenant de l’intégrer dans un vrai projet si ça vous chante, d’utiliser les contrôleurs, les custom requests et je ne sais quelle autre des nombreuses fonctionnalités de Laravel.

0 commentaire

Besoin d'aide ? Envie de partager ?
Inscrivez-vous ou connectez-vous d'abord.

Ça vous a plu ?
Abonnez-vous à la newsletter !

Recevez régulièrement news, trucs et astuces à propos de Laravel et son ecosystème.

Autres articles à lire