- Inscription
- 22 Octobre 2011
- Messages
- 14 613
- Réactions
- 8 473
- Points
- 30 925
-
Réponse de WhiiTe' Informatique et nouvelles technologies Développement : Créer un Validateur
- #1
Bonjour à tous,
Qu'est ce qu'un Validateur ?
Créer le Validateur
Quelques fonctions
Merci d'avoir lu, si vous avez une question , une suggestion ou un problème n'hésitez pas à me solliciter dans les commentaires.
Bon développement,
W.
Dans ce tutoriel je vais vous apprendre à créer votre propre validateur de donnée, de sorte à avoir un code plus propre et plus organisé .
Ce tutoriel a été réalisé sous PHP 7.0.10.
Ce tutoriel a été réalisé sous PHP 7.0.10.
Qu'est ce qu'un Validateur ?
Un validateur, est une classe possédant plusieurs fonctions qui vérifient la validité d'une chaîne de caractère selon des critères donnés.
Nous allons utiliser la programmation orienté objet .
A la fin de ce tutoriel, vous aurez un code semblable à celui ci-dessous, et vous saurez le modifier afin qu'il fonctionne pour votre projet.
Nous allons utiliser la programmation orienté objet .
A la fin de ce tutoriel, vous aurez un code semblable à celui ci-dessous, et vous saurez le modifier afin qu'il fonctionne pour votre projet.
PHP:
$validateur = $this->validator->check("WhiiTe'")->notEmpty()->alpha()->lengthBetween(2, 25);
Cet exemple est tiré d'une base MVC que je suis entrain de construire, j'y ai implanté un validateur qui fonctionne comme cela, pour le tutoriel, on partira d'un dossier vide .
Créer le Validateur
Dans un dossier vide, vous allez créer un fichier nommé Validator.php, qui contiendra notre classe, et nos fonctions, puis un fichier index.php.
Premièrement nous allons créer la classe Validator qui n'implémentera et n’étendra rien.
Premièrement nous allons créer la classe Validator qui n'implémentera et n’étendra rien.
PHP:
<?php
class Validator {
private $check;
private $errors = [];
}
?>
Les deux variables privées nous serviront plus tard, la première nous permettra de garder en mémoire la chaîne de caractère qui est testée, et la seconde contiendra les erreurs , qu'on ajoutera au tableau au fur et à mesure que le script détecte une erreur.
Maintenant, dans le fichier index.php, on va créer une nouvelle instance de notre classe.
Maintenant, dans le fichier index.php, on va créer une nouvelle instance de notre classe.
PHP:
<?php
require_once "Validator.php";
$validator = new Validator();
$test = $validator->check("WhiiTe")->notEmpty();
?>
Vous remarquez que j'ai appelé deux fonctions à la suite , c'est la syntaxe que nous allons donner à notre validateur, ce ne sera qu'une simple succession de fonctions qui s'occupent de traiter vos données plus rapidement et sans vous faire répéter votre code.
Premièrement dans le validateur, nous allons créer la fonction check, puis notEmpty pour l'exemple.
La fonction check prendra qu'un paramètre, celui-ci sera stocké tout au long du traitement dans la variable privée errors
Premièrement dans le validateur, nous allons créer la fonction check, puis notEmpty pour l'exemple.
La fonction check prendra qu'un paramètre, celui-ci sera stocké tout au long du traitement dans la variable privée errors
PHP:
public function check(String $check): Validator{
$this->check = $check;
return $this;
}
public function notEmpty(): Validator{
if(empty($this->check)){
$this->errors += ["Field cannot be empty."];
}
return $this;
}
Comme vous l'avez remarqué, je retourne toujours $this, de sorte à ce qu'on puisse enchaîner les fonctions les unes après les autres.
L'avantage est qu'une fois que la fonction check a définie la variable privée check, il ne nous sera plus nécessaire de préciser en paramètre des autres fonctions la chaîne de caractère à tester.
A présent dans le fichier index.php, faîtes un var_dump de la variable test.
L'avantage est qu'une fois que la fonction check a définie la variable privée check, il ne nous sera plus nécessaire de préciser en paramètre des autres fonctions la chaîne de caractère à tester.
A présent dans le fichier index.php, faîtes un var_dump de la variable test.
Code:
C:\wamp\www\Validator\index.php:8:
object(Validator)[1]
private 'check' => string 'WhiiTe' (length=6)
private 'errors' =>
array (size=0)
empty
Notre objet Validator contient nos deux variables, et un tableau vide pour les erreurs, normal car nous n'avons pas fait passer de chaîne vide dans la fonction check, si ça avait été le cas, nous aurions une entrée avec le message d'erreur du Validator.
Comme ceci.
Comme ceci.
Code:
C:\wamp\www\Validator\index.php:8:
object(Validator)[1]
private 'check' => string '' (length=0)
private 'errors' =>
array (size=1)
0 => string 'Field cannot be empty.' (length=22)
La validateur est quasiment terminé, nous allons créer deux dernières fonctions, getErrors qui nous renverra le tableau des erreurs, et getResponse, qui nous renverra un boolean selon le tableau des erreurs.
PHP:
public function getResponse(): bool{
if(empty($this->errors)){
return true;
}
return false;
}
public function errors(): Array{
return $this->errors;
}
Si le tableau des erreurs est vide, la fonction getResponse retournera true, on aurait pu se servir de la fonction errors qui retourne directement le tableau des erreurs, mais cela ajouterait du code et des vérifications en plus qui peuvent être évitées justement en faisant deux fonctions distinctes.
Et voilà, votre validateur est terminé, vous pouvez vous en servir, peu importe l'architecture de votre site.
Si vous utilisez un framework, tel que Laravel, ou CakePHP, sachez qu'il y a déjà un système de Validation.
Et voilà, votre validateur est terminé, vous pouvez vous en servir, peu importe l'architecture de votre site.
Si vous utilisez un framework, tel que Laravel, ou CakePHP, sachez qu'il y a déjà un système de Validation.
Quelques fonctions
Comme je suis quelqu'un de généreux , je vous ai fait quelques fonctions qui peuvent être plus ou moins utiles selon votre projet.
Je ne les ai pas décrites, le nom des fonctions parlent d'eux-mêmes, le code est compréhensible même par un débutant, pour les utiliser, vous devrez simplement faire comme la fonction notEmpty dans le fichier index.php, rajouter à la suite les fonctions que vous voulez utiliser.
Je ne les ai pas décrites, le nom des fonctions parlent d'eux-mêmes, le code est compréhensible même par un débutant, pour les utiliser, vous devrez simplement faire comme la fonction notEmpty dans le fichier index.php, rajouter à la suite les fonctions que vous voulez utiliser.
PHP:
public function lengthBetween(Int $min, Int $max): Validator{
if($min > strlen($this->check)){
$this->errors += ["Field is too short."];
}
if($max < strlen($this->check)){
$this->errors += ["Field is too long."];
}
return $this;
}
public function isInt(): Validator{
if(!is_int($this->check)){
$this->errors += ["Field is not a valid int."];
}
return $this;
}
public function alpha(): Validator{
if(!ctype_alnum($this->check)){
$this->errors += ["Field is not an alphanumeric value."];
}
return $this;
}
public function isBool(): Validator{
if(!is_bool($this->check)){
$this->errors += ["Field is not a boolean value."];
}
return $this;
}
public function isEmail(): Validator{
if(!preg_match("#^[a-z0-9._-][email protected][a-z0-9._-]{2,}\.[a-z]{2,4}$#", $this->check) && !filter_var($this->check, FILTER_VALIDATE_EMAIL)){
$this->errors += ["Field is not a valid email."];
}
return $this;
}
public function isUrl(): Validator{
if(!preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $this->check)){
$this->errors += ["Field is not a valid url."];
}
return $this;
}
public function isEqual(String $compare): Validator{
if($this->check !== $compare){
$this->errors += ["Fields not match."];
}
return $this;
}
Vous pouvez à tout moment rajouter des fonctions, tout dépend de ce que vous cherchez à faire.
Fin du tutoriel
Fin du tutoriel
Merci d'avoir lu, si vous avez une question , une suggestion ou un problème n'hésitez pas à me solliciter dans les commentaires.
Bon développement,
W.
Dernière édition: