Validateurs
Note
Le module Validators utilise la classe statique ValidatorsManager pour gérer la validation.
La validation permet de vérifier que les données membres d’un objet respectent certaines contraintes.
Ajout de validators
Soit la classe Author que nous souhaitons utiliser dans notre application :
1 namespace models;
2
3 class Author {
4 /**
5 * @var string
6 * @validator("notEmpty")
7 */
8 private $name;
9
10 public function getName(){
11 return $this->name;
12 }
13
14 public function setName($name){
15 $this->name=$name;
16 }
17 }
Une contrainte de validation a été ajoutée sur le membre name avec l’annotation @validator, de façon à rendre sa saisie obligatoire.
Génération du cache
Exécuter cette commande dans la console pour générer le cache de la classe Author :
Ubiquity init-cache -t=models
Le cache du validateur est généré dans le fichier app/cache/contents/validators/models/Author.cache.php
.
Validation d’instances
Une instance
public function testValidateAuthor(){
$author=new Author();
//Do something with $author
$violations=ValidatorsManager::validate($author);
if(sizeof($violations)>0){
echo implode('<br>', ValidatorsManager::validate($author));
}else{
echo 'The author is valid!';
}
}
Si le name de l’instance de author est vide, l’action devrait afficher :
name : This value should not be empty
La méthode validate retroune un tableau d’instances de ConstraintViolation .
Plusieurs instances
public function testValidateAuthors(){
$authors=DAO::getAll(Author::class);
$violations=ValidatorsManager::validateInstances($author);
foreach($violations as $violation){
echo $violation.'<br>';
}
}
Génération des models avec validateurs par défaut
Lorsque les classes sont générées automatiquement à partir de la base de données, des validateurs par défaut sont associés aux membres, basés su les méta-données des champs.
Ubiquity create-model User
1 namespace models;
2 class User{
3 /**
4 * @id
5 * @column("name"=>"id","nullable"=>false,"dbType"=>"int(11)")
6 * @validator("id","constraints"=>array("autoinc"=>true))
7 **/
8 private $id;
9
10 /**
11 * @column("name"=>"firstname","nullable"=>false,"dbType"=>"varchar(65)")
12 * @validator("length","constraints"=>array("max"=>65,"notNull"=>true))
13 **/
14 private $firstname;
15
16 /**
17 * @column("name"=>"lastname","nullable"=>false,"dbType"=>"varchar(65)")
18 * @validator("length","constraints"=>array("max"=>65,"notNull"=>true))
19 **/
20 private $lastname;
21
22 /**
23 * @column("name"=>"email","nullable"=>false,"dbType"=>"varchar(255)")
24 * @validator("email","constraints"=>array("notNull"=>true))
25 * @validator("length","constraints"=>array("max"=>255))
26 **/
27 private $email;
28
29 /**
30 * @column("name"=>"password","nullable"=>true,"dbType"=>"varchar(255)")
31 * @validator("length","constraints"=>array("max"=>255))
32 **/
33 private $password;
34
35 /**
36 * @column("name"=>"suspended","nullable"=>true,"dbType"=>"tinyint(1)")
37 * @validator("isBool")
38 **/
39 private $suspended;
40 }
Ces validateurs peuvent être modifiés.
Les modifications doivent toujours être suivies d’une ré-initialisation du cache des models.
Ubiquity init-cache -t=models
Les informations relatives aux validateurs existants sur les models peuvent être affichées avec les devtools :
Ubiquity info:validation -m=User
Retourne les validateurs associés au champ email :
Ubiquity info:validation email -m=User
Les informations de validation sont également accessibles depuis la partie models des webtools :
Types de validators
Basic
Validator |
Rôles |
Contraintes |
Valeurs acceptées |
---|---|---|---|
isBool |
Vérifie si la valeur est un booléen |
true,false,0,1 |
|
isEmpty |
Vérifie si la valeur n’est pas vide |
“”,null |
|
isFalse |
Vérifie si la valeur est false |
false,”false”,0,”0” |
|
isNull |
Vérifie si la valeur est nulle |
null |
|
isTrue |
Vérifie si la valeur est true |
true,”true”,1,”1” |
|
notEmpty |
Vérifie si la valeur n’est pas vide |
!null && !”” |
|
notNull |
Vérifie si la valeur n’est pas nulle |
!null |
|
type |
Vérifie que la valeur est du type {type} |
{type} |