Zend_Validate-ValidatorChains.xml 3.0 KB

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