| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <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(array('min' => 6,
- 'max' => 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, <methodname>getMessages()</methodname> 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 <methodname>addValidator()</methodname>. En positionnant
- <varname>$breakChainOnFailure</varname> à <constant>TRUE</constant>, 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 language="php"><![CDATA[
- $validateurChaine->addValidator(
- new Zend_Validate_StringLength(array('min' => 6,
- 'max' => 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>
|