Formation Laravel : Validation
Une fois les données du formulaire récupérées vous avez la possibilité d’effectuer une validation afin de vérifier que ceux-ci correspondent bien à ce que vous attendez.
1. La méthode validate de l’objet $request
Pour ce faire une méthode très simple et rapide existe depuis l’objet $request : la méthode validate().
Pour illustrer ce chapitre nous allons reprendre les données du formulaire du chapitre précédent.
$validation = $request->validate([
'title' => 'required|unique:books|max:255',
'price' => 'required|number',
'description' => 'required|max:255',
]);
Cette méthode ne fait pas partie des méthodes de la Class Request, elle est appelée via une macro de Laravel depuis la Class FoundationServiceProvider situé dans le namespace Illuminate\Foundation\Providers :
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
parent::register();
$this->registerRequestValidation();
$this->registerRequestSignatureValidation();
}
/**
* Register the "validate" macro on the request.
*
* @return void
*/
public function registerRequestValidation()
{
Request::macro('validate', function (array $rules, ...$params) {
return validator()->validate($this->all(), $rules, ...$params);
});
}
Encore une partie qui semble magique n’est-ce pas ? ^^
Ce n’est pas bien grave si vous n’en comprenez, ici, pas complètement le fonctionnement. Je vous en parle simplement pour que vous sachiez d’où cette méthode nous vient.
2. Un formulaire de Request
Une manière plus « propre » consiste à créer un formulaire de requête afin de séparer ce qui touche au traitement de notre requête et éviter d’encombrer nos controllers avec des validations.
Nous allons donc commencer par créer un nouveau formulaire de requête via la commande suivante :
php artisan make:request BookRequest
Cela va créer un dossier Requests dans app/Http ainsi que votre premier FormRequest (formulaire de requête). En l’ouvrant on y voit ceci :
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class BookRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
Nous avons donc notre BookRequest qui extends FormRequest et qui contient 2 méthodes : authorize()
et rules()
. Nous allons mettre les règles de notre validation dans rules et nous allons retourner la valeur de authorize()
à true car nous voulons autoriser l’utilisateur à faire cette requête :
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class BookRequest 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 [
'title' => 'required|unique:books|max:255',
'price' => 'required|numeric',
'description' => 'required|max:255',
'cover' => 'image|mimes:jpeg,jpg,png,gif,bmp,svg|max:1024'
];
}
}
Pour avoir la liste exhaustive de l’ensemble des règles de validation je vous invite à vous rendre sur la documentation officielle 😉
Maintenant il faut passer ce formulaire de requête dans notre controller, pour cela nous avons juste à changer le typage de $request
:
// on ajoute le namespace de BookRequest
use App\Http\Requests\BookRequest;
class BookController extends Controller {
// on précise le type de $request, qui est un objet de la Class BookRequest maintenant
public function store(BookRequest $request) {
//
}
}
3. Les messages d’erreurs
Maintenant que nous avons nos règles de validation côté serveur nous devons informer l’utilisateur de la réussite ou de l’échec de l’envoi de ses données côté front. Nous allons donc mettre en place des messages d’erreurs qui apparaitront en cas d’échec et permettront d’informer l’utilisateur.
Commençons par les erreurs. Comme nous venons de le voir dans le chapitre Formulaire Blade met à notre disposition la directive @error
afin de nous permettre d’afficher une erreur si celle-ci existe. Par exemple si l’on veut afficher l’erreur pour la validation de l’input description :
@error('description')
<p> {{ $message }} </p>
@enderror
$message renverra le message en rapport avec cette erreur de validation. Les messages par défaut de vos validations sont dans le fichier ressources/lang/en/validation.php qui est un grand tableau de messages.
Attention car si vous changez les valeurs de la langue locale dans votre fichier app.php (par exemple par fr) Laravel ne saura plus où trouver les messages à renvoyer et renverra le « chemin » du message qu’il cherche. Par exemple ici : validation.max.string (car il s’agit de l’erreur ‘string’ dans l’array ‘max’ qui lui même est dans l’array du fichier validation).
Si vous voulez donc changer la langue de votre application n’oubliez pas d’ajouter le dossier de messages de la langue en question dans le dossier ‘lang’.
Besoin d'une formation personalisée ?
Avis
Pas de titre
cool
Pas de titre
Pas de titre
Merci beaucoup pour ce cour.
Pas de titre
super
Pas de titre
Merci énormément je suis sur exciter à cause de ce cours