Aller au contenu principal
Version: 5.x

Validation des données

Introduction

La validation des données est une partie cruciale de toute application web. BowPHP fournit un système de validation simple, élégant et puissant qui vous permet de valider facilement vos données entrantes.

Utilisation de base

Conseil

La façon la plus simple d'utiliser le validateur est via la fonction helper validator(). Voici un exemple simple :

$data = [
"name" => "John Doe",
"email" => "john@example.com",
"age" => 25
];

$validation = validator($data, [
"name" => "required|min:3|max:50",
"email" => "required|email",
"age" => "required|int"
]);

if ($validation->fails()) {
// La validation a échoué
$errors = $validation->getMessages();
// Gérer les erreurs
}

Règles de validation disponibles

Règles

BowPHP propose un large éventail de règles de validation pour couvrir la plupart des besoins de validation courants.

Règles de base

RègleDescription
requiredLe champ est obligatoire
required_if:field1,field2Le champ est obligatoire si les champs spécifiés existent
nullableLe champ peut être null ou absent (court-circuite les règles suivantes)
confirmedLe champ doit être identique au champ <nom>_confirmation
different:fieldLe champ doit être différent d'un autre champ
same:valueLe champ doit être identique à la valeur spécifiée
in:val1,val2,...La valeur doit faire partie de la liste donnée
emailLe champ doit être une adresse email valide
min:valueLa longueur minimale du champ
max:valueLa longueur maximale du champ
size:valueLa longueur exacte du champ
between:min,maxValeur (numérique) ou longueur (chaîne) entre min et max inclus
nullable combiné avec required

Par défaut, nullable interrompt l'exécution des règles suivantes dès qu'il matche. Exception : si required figure aussi dans la chaîne, required s'exécute quand même. Cela permet d'écrire nullable|required pour signifier « doit être présent même si vide » et garder la sémantique attendue par les utilisateurs.

Règles de type

RègleDescription
alphaUniquement des caractères alphabétiques
alphanumUniquement des caractères alphanumériques
numberLe champ doit être un nombre
intLe champ doit être un entier
floatLe champ doit être un nombre décimal
boolean / boolAccepte true, false, 0, 1, '0', '1', 'true', 'false'
jsonLe champ doit être une chaîne JSON valide
uuidLe champ doit être un UUID canonique (versions 1 à 5)

Règles de format

RègleDescription
dateFormat de date (YYYY-MM-DD)
datetimeFormat datetime (YYYY-MM-DD HH:MM:SS)
regex:patternLe champ doit correspondre au pattern regex
lowerUniquement des lettres minuscules
upperUniquement des lettres majuscules
urlLe champ doit être une URL bien formée (filter_var FILTER_VALIDATE_URL)
ipLe champ doit être une adresse IPv4 ou IPv6
ip:v4Le champ doit être une adresse IPv4 uniquement
ip:v6Le champ doit être une adresse IPv6 uniquement

Règles de base de données

RègleDescription
unique:table,columnLa valeur doit être unique dans la table
exists:table,columnLa valeur doit exister dans la table
!exists:table,columnLa valeur ne doit pas exister dans la table

Messages d'erreur personnalisés

Personnalisation

Vous pouvez personnaliser les messages d'erreur en passant un tableau de messages comme troisième argument :

$validation = validator($data, [
"name" => "required|min:3",
"email" => "required|email"
], [
"name" => [
"required" => "Le nom est obligatoire",
"min" => "Le nom doit contenir au moins 3 caractères"
],
"email" => [
"required" => "L'email est obligatoire",
"email" => "L'email n'est pas valide"
]
]);

Récupération des erreurs

Méthodes disponibles

Le validateur fournit plusieurs méthodes pour récupérer les informations sur les erreurs :

// Vérifie si la validation a échoué
$validation->fails(); // bool

// Récupère tous les messages d'erreur
$validation->getMessages(); // array

// Récupère le dernier message d'erreur
$validation->getLastMessage(); // string

// Récupère les champs qui ont échoué
$validation->getCorruptedFields(); // array

// Récupère les règles qui ont échoué
$validation->getFailsRules(); // array

Validation et exceptions

Exceptions

Vous pouvez lancer une exception de validation avec la méthode throwError() :

$validation = validator($data, $rules);

if ($validation->fails()) {
$validation->throwError(); // Lance ValidationException
}

L'exception contiendra les messages d'erreur et définira automatiquement le code de statut HTTP à 400.

Validation dans les contrôleurs

Voici un exemple pratique d'utilisation du validateur dans un contrôleur:

class UserController
{
public function store()
{
$validation = validator(request()->all(), [
"name" => "required|min:3|max:50",
"email" => "required|email|unique:users,email",
"password" => "required|min:6"
]);

if ($validation->fails()) {
return response()->json([
"errors" => $validation->getMessages()
], 400);
}

// Créer l'utilisateur
User::create(request()->all());

return response()->json([
"message" => "Utilisateur créé avec succès"
]);
}
}

Bonnes pratiques

Recommandations

Suivez ces bonnes pratiques pour une validation efficace et sécurisée :

  1. Validation précoce : Validez les données le plus tôt possible dans le cycle de vie de la requête.
  2. Messages clairs : Utilisez des messages d'erreur descriptifs et compréhensibles.
  3. Règles composées : Combinez plusieurs règles pour une validation robuste.
  4. Sécurité : Utilisez toujours la validation côté serveur, même si vous avez une validation côté client.

Il manque quelque chose ?

Si vous rencontrez des problèmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou directement sur le github.