Zend_Validate.xml 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 12116 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.validate.introduction">
  5. <title>Introduction</title>
  6. <para>Le composant <classname>Zend_Validate</classname> fournit un ensemble de validateurs usuels. Il fournit également un
  7. mécanisme simple de chaînage permettant d'appliquer de multiples validateurs à une donnée dans un ordre défini par
  8. l'utilisateur.</para>
  9. <sect2 id="zend.validate.introduction.definition">
  10. <title>Qu'est-ce qu'un validateur ?</title>
  11. <para>Un validateur examine ce qui lui est soumis suivant certaines règles et retourne un résultat booléen, si
  12. la donnée est conforme aux exigences. Si ce n'est pas le cas, un validateur peut de manière optionnelle fournir
  13. des informations concernant la (ou les) règle(s) non remplie(s).</para>
  14. <para>Par exemple, une application Web peut réclamer qu'un identifiant comprennent entre six et douze caractères
  15. et ne contiennent que des caractères alphanumériques. Un validateur peut être utilisé pour s'assurer que les
  16. identifiants remplissent ces règles. Si un identifiant donné ne respecte pas l'une ou plusieurs de ces règles,
  17. il sera utile de savoir laquelle ou lesquelles en particulier.</para>
  18. </sect2>
  19. <sect2 id="zend.validate.introduction.using">
  20. <title>Utilisation basique des validateurs</title>
  21. <para>Avoir défini la validation de cette manière fournit la fondation de <classname>Zend_Validate_Interface</classname>,
  22. qui définit deux méthodes, <code>isValid()</code> et <code>getMessages()</code>. La méthode
  23. <code>isValid()</code> réalise la validation sur la valeur fournie, en retournant <code>true</code> si et
  24. seulement si la valeur respecte les critères de validation.</para>
  25. <para>Si <code>isValid()</code> retourne <code>false</code>, <code>getMessages()</code> retourne un tableau de
  26. messages expliquant la(es) raison(s) de l'échec de la validation. Les clés du tableau sont des chaînes courtes
  27. qui identifient les raisons de l'échec de la validation, et les valeurs du tableau sont les chaînes de messages
  28. humainement lisibles correspondantes. Les clés et les valeurs sont dépendantes de la classe ; chaque classe de
  29. validation définit son propre jeu de messages d'échec de validation et les clés uniques qui les identifient.
  30. Chaque classe possède aussi une définition de constantes ("<code>const</code>") qui rattachent tout
  31. identificateur à une cause d'échec de validation.</para>
  32. <para>La méthode <code>getErrors()</code> retourne un tableau d'informations courtes qui identifient la(es)
  33. raison(s) de l'échec de la validation. Ces chaînes sont fournies pour identifier les erreurs. Elles sont
  34. destinées à votre code d'application, et non à être affichées pour l'utilisateur. Ces chaînes sont dépendantes
  35. de la classe ; chaque classe de validation définit ces propres chaînes pour identifier la cause des erreurs.
  36. Chaque classe fournit de plus des constantes (<code>const</code>) qui correspondent aux identificateurs
  37. d'erreur.</para>
  38. <note>
  39. <para>La méthode <code>getMessages()</code> retourne des informations sur l'échec de validation seulement
  40. pour l'appel le plus récent de <code>isValid()</code>. Chaque appel de <code>isValid()</code> efface les
  41. messages et les erreurs déclenchées par l'appel précédent, car il est probable que chaque appel de
  42. <code>isValid()</code> est réalisé pour des données d'entrée différentes.</para>
  43. </note>
  44. <para>L'exemple suivant illustre la validation d'une adresse émail : <programlisting role="php"><![CDATA[
  45. $validator = new Zend_Validate_EmailAddress();
  46. if ($validator->isValid($email)) {
  47. // l'email est valide
  48. } else {
  49. // l'email est invalide ; affichons pourquoi
  50. foreach ($validator->getMessages() as $messageId => $message) {
  51. echo "Echec de validation '$messageId' : $message\n";
  52. }
  53. }
  54. ]]></programlisting></para>
  55. </sect2>
  56. <sect2 id="zend.validate.introduction.messages">
  57. <title>Messages personnalisés</title>
  58. <para>Les classes de validation fournissent une méthode <code>setMessage()</code> avec laquelle vous pouvez
  59. spécifier le format du message retourné par <code>getMessages()</code> dans le cas d'un échec de validation. Le
  60. premier argument de cette méthode est une chaîne contenant le message d'erreur. Vous pouvez inclure des balises
  61. dans cette chaîne qui seront substituées avec les données appropriées du validateur. La balise
  62. <code>%value%</code> est supportée par tous les validateurs ; elle est substituée par la valeur fournie à
  63. <code>isValid()</code>. D'autres balises peuvent être supportées aux cas par cas par chaque classe de
  64. validation. Par exemple, <code>%max%</code> est une balise supportée par <classname>Zend_Validate_LessThan</classname>. La
  65. méthode <code>getMessageVariables()</code> retourne un tableau des balises de variables supportées par le
  66. validateur.</para>
  67. <para>Le second paramètre optionnel est une chaîne qui identifie le modèle de message d'échec de validation qui
  68. doit être paramètré, ce qui est pratique quand une classe de validation définit plus d'une cause d'échec. Si
  69. vous omettez ce second argument, <code>setMessage()</code> considère que le message, que vous spécifiez,
  70. s'applique au premier message déclaré dans la classe de validation. La plupart des classes de validation n'ayant
  71. qu'un seul message d'erreur, il n'est pas nécessaire de spécifier distinctement dans ce cas quel message vous
  72. affectez.</para>
  73. <para><programlisting role="php"><![CDATA[
  74. $validator = new Zend_Validate_StringLength(8);
  75. $validator->setMessage(
  76. 'La chaîne \'%value%\' est trop courte ; '
  77. . 'elle doit être au moins de %min% caractères',
  78. Zend_Validate_StringLength::TOO_SHORT);
  79. if (!$validator->isValid('word')) {
  80. $messages = $validator->getMessages();
  81. echo current($messages);
  82. // affiche "La chaîne 'word' est trop courte ;
  83. // elle doit être au moins de 8 caractères"
  84. }
  85. ]]></programlisting></para>
  86. <para>Vous pouvez régler des messages multiples en utilisant la méthode <code>setMessages()</code>. Son argument
  87. dans ce cas est un tableau de paires clé/message. <programlisting role="php"><![CDATA[
  88. $validator = new Zend_Validate_StringLength(8, 12);
  89. $validator->setMessages( array(
  90. Zend_Validate_StringLength::TOO_SHORT =>
  91. 'La chaîne \'%value%\' est trop courte',
  92. Zend_Validate_StringLength::TOO_LONG =>
  93. 'La chaîne \'%value%\' est trop longue'
  94. ));
  95. ]]></programlisting></para>
  96. <para>Si votre application exige une flexibilité encore plus grande avec laquelle elle rapporte les échecs de
  97. validation, vous pouvez accéder aux propriétés par le même nom que les balises de message supportées par une
  98. classe de validation donnée. La propriété <code>value</code> est toujours accessible dans un validateur ; il
  99. s'agit de la valeur fournie comme argument à <code>isValid()</code>. D'autres propriétés peuvent être supportées
  100. au cas par cas par chaque classe de validation. <programlisting role="php"><![CDATA[
  101. $validator = new Zend_Validate_StringLength(8, 12);
  102. if (!validator->isValid('word')) {
  103. echo 'Echec du mot : '
  104. . $validator->value
  105. . ' ; sa longueur n\'est pas compris entre '
  106. . $validator->min
  107. . ' et '
  108. . $validator->max
  109. . "\n";
  110. }
  111. ]]></programlisting></para>
  112. </sect2>
  113. <sect2 id="zend.validate.introduction.static">
  114. <title>Utilisation de la méthode statique <code>is()</code></title>
  115. <para>S'il est peu pratique de charger une classe de validation donnée et créer une instance de validateur, vous
  116. pouvez utiliser la méthode statique <classname>Zend_Validate::is()</classname> comme appel alternatif. Le premier argument
  117. de cette méthode est la donnée d'entrée, que vous passeriez à la méthode <code>isValid()</code>. Le deuxième
  118. argument est une chaîne, qui correspond au nom de base de la classe de validation, relativement dans l'espace de
  119. noms <classname>Zend_Validate</classname>. La méthode <code>is()</code> charge automatiquement la classe, crée une
  120. instance et applique la méthode <code>isValid()</code> à la donnée d'entrée. <programlisting
  121. role="php"><![CDATA[
  122. if (Zend_Validate::is($email, 'EmailAddress')) {
  123. // l'email est valide
  124. }
  125. ]]></programlisting></para>
  126. <para>Vous pouvez aussi fournir un tableau de paramètres destinés au constructeur de la classe, s'ils sont
  127. nécessaires pour votre classe de validation. <programlisting role="php"><![CDATA[
  128. if (Zend_Validate::is($value, 'Between', array(1, 12))) {
  129. // $value est compris entre 1 et 12
  130. }
  131. ]]></programlisting></para>
  132. <para>La méthode <code>is()</code> retourne une valeur booléenne, la même que la méthode <code>isValid()</code>.
  133. Lors de l'utilisation de la méthode statique <code>is()</code>, les messages d'échec de validation ne sont pas
  134. disponibles.</para>
  135. <para>L'utilisation statique peut être pratique pour invoquer un validateur ad hoc, mais si vous avez besoin
  136. d'exécuter un validateur pour des données multiples, il est plus efficace de suivre le premier exemple
  137. ci-dessus, créant une instance de l'objet de validation et appelant sa méthode <code>isValid()</code>.</para>
  138. <para>De plus, la classe <classname>Zend_Filter_Input</classname> vous permet d'instancier et d'exécuter des filtres
  139. multiples et des classes de validateurs sur demande pour traiter l'ensemble de données saisies. Voir <xref
  140. linkend="zend.filter.input" />.</para>
  141. </sect2>
  142. </sect1>