Inscrivez-vous

Les marques pages vous permettent de marquer facilement un chapitre pour y revenir facilement. Pour profiter de cette fonctionnalité inscrivez-vous sur le site

Inscription

Vous êtes déjà inscris ? Enregistrez-vous.

Écrit par Alexandre Buleté

Mise à jour le 20 juillet 2019 | Difficulté : moyen

5.0/5   1 Avis  |  3.6K views

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() }}

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 à l'instruction @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

N'hésitez pas à laisser votre avis. Actuellement 1 avis sur ce cours

Note Globale : 5.0/5

Classer par …  

Date

Rate

Dans l'ordre…  

Croissant

Décroissant

5.0/5

Merci beaucoup.

il y a 2 moiss

notez et laissez un avis

--/5

connectez-vous pour laisser un avis

Vous n'avez pas de compte ? Inscrivez-vous ici.