21 octobre 2021 85.831K

Formation Laravel : Formulaire

Dans la partie précédente de ce cours nous venons de voir comment enregistrer de fausses données. Maintenant nous aimerions voir comment en enregistrer des vraies ! 🙂

Pour qu’un utilisateur enregistre de nouvelles données vous aurez besoin de lui faire remplir un formulaire pour récolter les données et les envoyer sur votre serveur.

1. Le token CSRF

Les formulaires se construisant dans la vue nous allons donc revenir un peu sur Blade et voir comment créer un formulaire fonctionnel. Pour notre exemple nous allons faire un formulaire pour rentrer un nouveau produit que nous voudrons mettre en vente sur le site. Ayant déjà de bonne connaissance en html vous saurez facilement monter un formulaire pour ça (ici je mets de côté toute mise en page avec les class css etc pour rester focus sur le sujet du chapitre) :

<!-- Ici on extend un éventuel layout comme vu dans notre chapitre sur Blade -->
@extends('layout')

@section('content')
    <form action="{{ route('store.product') }}" method="POST">
        @csrf
        <label for="name">Nom du produit : </label>
        <input type="text" name="name">
        
        <label for="price">Prix du produit : </label>
        <input type="number" name="price" step="0.01">
        
        <label for="description">Description du produit : </label>
        <textarea name="description">
        </textarea>
        
        <input type="submit" value="Envoyer">
    </form>
@endsection

Ici on extend un éventuel layout comme vu dans notre chapitre sur Blade et on crée un formulaire dans notre section nommée “content”. Un élément devrait attirer votre attention : l’instruction @csrf, il s’agit d’un token CSRF (qui sont les acronymes de « Cross-Site Request Forgery ») qui est une vulnérabilité des services d’authentification. Avec Blade ce token CSRF peut également s’écrire :

{{ csrf_field() }}

Vous pouvez également utiliser la directive @csrf :

@csrf

Cela vous crée le champ caché suivant :

<input type="hidden" name="_token" value="unTokenGenere">

Un simple champ input de type hidden nommé “_token”. Ce champ correspond à l’un de vos cookies qui se nomme XSRF-TOKEN. Quand le formulaire est envoyé au serveur (et vos cookies aussi par la même occasion), le serveur check la correspondance entre le token dans vos cookies et celui du formulaire.

Petit détail : vous aurez compris que si le input caché contient le token est en rapport avec celui de vos cookies, il peut y avoir plusieurs formulaires sur la même page, ceux-ci auront le même token dans leur champ _token car vous n’avez qu’un seul cookie XSRF-TOKEN.

2. Les méthodes PUT, PATCH, DELETE

Nous avons vu dans le chapitre du Routing que l’on pouvait attribuer aux routes différentes méthodes, notamment put, patch et delete qui ne sont pas supporté par les formulaires HTML. Laravel, comme la plupart des autres frameworks vous permet d’utiliser ses méthodes en passant un champ caché dans votre formulaire :

<input type="hidden" name="_method" value="PUT" />

Blade vous simplifie encore plus la syntaxe grâce à la directive @method() :

@method('PUT')

3. Les erreurs de validation

Blade vous permet d’accéder facilement aux erreurs de validation grâce à l’instruction @error.

<input id="title" type="text" class="@error('title') is-invalid @enderror">

@error('title')
    <p class="error-message">{{ $message }}</p>
@enderror

Dans l’exemple ci-dessus si une erreur survient pour le champ nommé “title” alors les instructions entre @error('title') et @enderror s’exécute. Vous pouvez ainsi rajouter très facilement des class, des messages d’erreurs etc… dans le formulaire de votre vue Blade.

Cette directive @error étant une simple condition cela revient à écrire ceci :

@if ( $errors->has('title') )
    <p class="error-message">{{ $errors->first('slug') }}</p>
@endif

Certains habitués de framework peuvent se demander s’il y a un autre moyen que d’écrire simplement du pur HTML dans notre vue Blade. En utilisant un composant PHP de Laravel. La réponse est non, du moins pas depuis Laravel en lui-même. Pour cela vous devrez passer par des composant externes tel que le Form Builder de Kristijan Husak ou bien Laravel Collective Html. Ce genre de composant est appelé Service Provider et nous verrons plus tard dans le cours comment les ajouter lorsqu’ils sont externes à notre application.

Laravel avait prévu un composant de constructeur de formulaire jusqu’à la version 4.2 mais Taylor Otwell, le créateur de Laravel, a trouvé préférable de le retirer du cœur de Laravel et de passer le relais à la communauté de Laravel pour la création et la maintenance d’un tel composant. Car pas tout le monde n’est amené à s’en servir. Moi le premier je trouve plus agréable de pouvoir styliser son formulaire avec du pur HTML quitte, par la suite, à éventuellement créer un mini-composant perso pour refactoriser mon code. 🙂

Une fois votre formulaire crée celui-ci envoie une requête à votre serveur avec toutes les données rentrées. Allons donc voir ce qu’il se passe côté serveur 🙂

Avis

4.8
Évaluer 4.8 sur 5
Excellent80%
Splendide !20%
Sympa0%
Sans plus0%
Pas terrible0%

Pas de titre

Évaluer 5 sur 5
25 mai 2022

L’un des meilleurs cours de laravel !
Merci bien

Estimé Gliti

Très bien représenté

Évaluer 5 sur 5
13 avril 2022

Le cour est bien représenté et bien détaillé.
Merci.

Petit-Homme wadly

Pas de titre

Évaluer 5 sur 5
9 avril 2022

Merci

Anis kadri

Merci

Évaluer 4 sur 5
7 juin 2021

Merci très bonne présentation.

Samuel

Merci !

Évaluer 5 sur 5
30 septembre 2019

Merci beaucoup.

Aziz