Valider les données

Voir la vidéo
Description Sommaire

Dans ce nouveau chapitre on va découvrir la partie validation avant d'attaquer la gestion des formulaires. Il est important de s'assurer que les données envoyées à notre application correspondent à ce que l'on attend. Pour cela, Laravel nous offre une classe Validator qui va nous permettre de gérer cette opération.

$validator = Validator::make($data, [
    'name' => 'required|string'
])

La méthode make() prendra en premier paramètre les données à valider et en second paramètre un tableau représentant les règles de validations.

Il existe plusieurs manières de définir les règles de validation :

  • Sous forme d'une chaîne de caractères avec les différentes règles séparées par des |.
  • Sous forme d'un tableau listant l'ensemble des règles (ex : ["required", "min:4"])
  • En utilisant la classe Illuminate\Validation\Rule pour des règles plus complexes (ex: Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2))

A partir de cet objet on peut tester l'état de notre validation à l'aide de différentes méthodes.

  • La méthode fails() renvoie un booléen pour savoir si une validation a échoué ou non
  • La méthode errors() permet de récupérer les messages d'erreurs associés aux éléments qui ne satisfont pas les règles de validation.
  • La méthode validated() renvoie un tableau correspondant aux données qui ont été validées (en supprimant les clef qui n'ont pas de règles de validation).

Cette dernière méthode, va aussi renvoyer une exception si les données ne sont pas valides. Ce type d'exception sera automatiquement capturée par le framework qui réagira différemment suivant le type de requêtes.

  • Dans le cas d'une requête qui attend du JSON, les erreurs seront renvoyés au format JSON.
  • Dans le cas d'une requête qui attend de l'HTML, la réponse sera une redirection vers la page précédente avec les erreurs et les données soumises sauvegardées en session.

Cette méthode validated() est très intéressante parce qu'elle permet à la fois de s'assurer que les données sont valides pour la suite de l'exécution et permet au framework de gérer les erreurs si c'est nécessaire.

$data = $validator->validated();
// Pour récupérer juste une valeur
$firstname = $validator->validated('firstname');

FormRequest

Si on souhaite valider les paramètres provenant de la requête faite par l'utilisateur (soumission d'un formulaire ou validation de paramètres dans l'URL) il est possible d'utiliser des objets de requête personnalisés. Pour créer une requête on peut utiliser la commande artisan:

php artisan make:request CreatePostRequest

Cette commande va créer automatiquement une nouvelle classe qui possède 2 méthodes :

  • authorize qui renverra un booléen pour dire si l'utilisateur à le droit ou non de consulter la page (on verra cela plus tard).
  • rules qui renverra un tableau contenant les règles de validation à satisfaire.

Ensuite, nous pouvons injecter cet objet CreatePostRequest dans notre contrôleur, au lieu de l'objet Request de base.

function store(CreatePostRequest $request) {
    $data = $request->validated();
    // ...
}

Laravel se chargera automatiquement de valider les données à partir de nos règles et de renvoyer la bonne réponse en cas d'erreur. A l'intérieur de la logique de la fonction on saura que les données sont valide et on pourra continuer son exécution.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager