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
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
BowPHP propose un large éventail de règles de validation pour couvrir la plupart des besoins de validation courants.
Règles de base
| Règle | Description |
|---|---|
required | Le champ est obligatoire |
required_if:field1,field2 | Le champ est obligatoire si les champs spécifiés existent |
nullable | Le champ peut être null ou absent (court-circuite les règles suivantes) |
confirmed | Le champ doit être identique au champ <nom>_confirmation |
different:field | Le champ doit être différent d'un autre champ |
same:value | Le champ doit être identique à la valeur spécifiée |
in:val1,val2,... | La valeur doit faire partie de la liste donnée |
email | Le champ doit être une adresse email valide |
min:value | La longueur minimale du champ |
max:value | La longueur maximale du champ |
size:value | La longueur exacte du champ |
between:min,max | Valeur (numérique) ou longueur (chaîne) entre min et max inclus |
nullable combiné avec requiredPar 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ègle | Description |
|---|---|
alpha | Uniquement des caractères alphabétiques |
alphanum | Uniquement des caractères alphanumériques |
number | Le champ doit être un nombre |
int | Le champ doit être un entier |
float | Le champ doit être un nombre décimal |
boolean / bool | Accepte true, false, 0, 1, '0', '1', 'true', 'false' |
json | Le champ doit être une chaîne JSON valide |
uuid | Le champ doit être un UUID canonique (versions 1 à 5) |
Règles de format
| Règle | Description |
|---|---|
date | Format de date (YYYY-MM-DD) |
datetime | Format datetime (YYYY-MM-DD HH:MM:SS) |
regex:pattern | Le champ doit correspondre au pattern regex |
lower | Uniquement des lettres minuscules |
upper | Uniquement des lettres majuscules |
url | Le champ doit être une URL bien formée (filter_var FILTER_VALIDATE_URL) |
ip | Le champ doit être une adresse IPv4 ou IPv6 |
ip:v4 | Le champ doit être une adresse IPv4 uniquement |
ip:v6 | Le champ doit être une adresse IPv6 uniquement |
Règles de base de données
| Règle | Description |
|---|---|
unique:table,column | La valeur doit être unique dans la table |
exists:table,column | La valeur doit exister dans la table |
!exists:table,column | La valeur ne doit pas exister dans la table |
Messages d'erreur personnalisés
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
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
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
Suivez ces bonnes pratiques pour une validation efficace et sécurisée :
- Validation précoce : Validez les données le plus tôt possible dans le cycle de vie de la requête.
- Messages clairs : Utilisez des messages d'erreur descriptifs et compréhensibles.
- Règles composées : Combinez plusieurs règles pour une validation robuste.
- 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.