| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- <!-- EN-Revision: 11089 -->
- <sect1 id="zend.validate.validator_chains">
- <title>Chaînes de validation</title>
- <para>Souvent, de multiples validations doivent être appliquées à une valeur dans un ordre particulier. Le code
- suivant décrit une méthode permettant de solutionner l'exemple de <link
- linkend="zend.validate.introduction">l'introduction</link>, dans lequel un identifiant doit contenir précisément
- entre 6 et 12 caractères alphanumériques. <programlisting role="php"><![CDATA[
- // Creation d'une chaine de validateurs et ajout de validateurs
- $validateurChaine = new Zend_Validate();
- $validateurChaine->addValidator(new Zend_Validate_StringLength(6, 12))
- ->addValidator(new Zend_Validate_Alnum());
- // Validation de l'identifiant
- if ($validateurChaine->isValid($identifiant)) {
- // l'identifiant est testé avec succès
- } else {
- // l'identifiant échoue aux tests, afficher pourquoi
- foreach ($validateurChaine->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting> Les validateurs sont exécutés dans leur ordre d'ajout à <classname>Zend_Validate</classname>. Dans l'exemple
- ci-dessus, l'identifiant est d'abord testé pour vérifier que sa longueur est bien comprise entre 6 et 12 caractères,
- puis ensuite testé pour vérifier qu'il ne contient bien que des caractères alphanumériques. Le second test est
- exécuté quelque soit le résultat du précédent. Ainsi, dans le cas où les deux tests échouent,
- <code>getMessages()</code> retournera un message d'échec pour chacun des validateurs.</para>
- <para>Dans certains cas, il peut être utile d'interrompre le processus si l'un des tests échoue.
- <classname>Zend_Validate</classname> permet ce cas de figure via l'usage du deuxième paramètre de la méthode
- <code>addValidator()</code>. En positionnant <code>$breakChainOnFailure</code> à <code>true</code>, le validateur
- ajouté interrompra la procédure de test s'il échoue, ce qui permet d'éviter de lancer tout autre test qui serait
- inutile ou inapproprié dans ce cas de figure. Si l'exemple précédent était écrit comme suit, la validation
- alphanumérique ne serait pas lancé si la vérification de la longueur de la valeur échouait : <programlisting
- role="php"><![CDATA[
- $validateurChaine->addValidator(new Zend_Validate_StringLength(6, 12), true)
- ->addValidator(new Zend_Validate_Alnum());
- ]]></programlisting></para>
- <para>Tout objet qui implémente <classname>Zend_Validate_Interface</classname> peut être utilisé dans une chaîne de
- validation.</para>
- </sect1>
|