Zend_Validate-ValidatorChains.xml 2.7 KB

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