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 :

app/models/Author.php
 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
app/models/Author.php
 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
../_images/info-validation-devtools.png

Retourne les validateurs associés au champ email :

Ubiquity info:validation email -m=User
../_images/info-validation-email-devtools.png

Les informations de validation sont également accessibles depuis la partie models des webtools :

../_images/info-validation-webtools.png

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}

Comparison

Dates

Multiples

Strings