Zend_Validate-Callback.xml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 19529 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.callback">
  5. <title>Callback (fonction de rappel)</title>
  6. <para>
  7. <classname>Zend_Validate_Callback</classname> permet de fournir une fonction de rappel
  8. utilisée pour valider la valeur.
  9. </para>
  10. <sect3 id="zend.validate.set.callback.basic">
  11. <title>Utilisation classique</title>
  12. <para>
  13. Le plus simple est de posséder une fonction classique, qui sera utilisée
  14. pour valider la donnée. Soit la fonction ci-après :
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. function myMethod($value)
  18. {
  19. // ici de la validation à effectuer
  20. return true;
  21. }
  22. ]]></programlisting>
  23. <para>
  24. Pour l'utiliser avec<classname>Zend_Validate_Callback</classname> vous devez simplement
  25. effectuer votre appel comme ceci:
  26. </para>
  27. <programlisting language="php"><![CDATA[
  28. $valid = new Zend_Validate_Callback('myMethod');
  29. if ($valid->isValid($input)) {
  30. // input semble valide
  31. } else {
  32. // input est invalide
  33. }
  34. ]]></programlisting>
  35. </sect3>
  36. <sect3 id="zend.validate.set.callback.closure">
  37. <title>Utilisation avec les fonctions anonymes (closures)</title>
  38. <para>
  39. PHP 5.3 introduit les <ulink url="http://php.net/functions.anonymous">fonctions
  40. anonymes</ulink> ou fonctions de <emphasis>fermeture</emphasis>. PHP traite les
  41. fonctions anonymes comme des fonctions de rappel valides, et il est donc
  42. possible d'utiliser celles-ci avec <classname>Zend_Validate_Callback</classname>.
  43. Exemple:
  44. </para>
  45. <programlisting language="php"><![CDATA[
  46. $valid = new Zend_Validate_Callback(function($value){
  47. // Validation ici
  48. return true;
  49. });
  50. if ($valid->isValid($input)) {
  51. // input semble valide
  52. } else {
  53. // input est invalide
  54. }
  55. ]]></programlisting>
  56. </sect3>
  57. <sect3 id="zend.validate.set.callback.class">
  58. <title>Utilisation avec les méthodes de rappel</title>
  59. <para>
  60. Bien sûr, il est aussi possible d'utiliser des méthodes de rappel:
  61. </para>
  62. <programlisting language="php"><![CDATA[
  63. class MyClass
  64. {
  65. public function myMethod($value)
  66. {
  67. // Validation ici
  68. return true;
  69. }
  70. }
  71. ]]></programlisting>
  72. <para>
  73. La définition de la fonction de rappel se fait alors dans un tableau contenant un
  74. objet de la classe et la méthode à appeler:
  75. </para>
  76. <programlisting language="php"><![CDATA[
  77. $object = new MyClass;
  78. $valid = new Zend_Validate_Callback(array($object, 'myMethod'));
  79. if ($valid->isValid($input)) {
  80. // input semble valide
  81. } else {
  82. // input est invalide
  83. }
  84. ]]></programlisting>
  85. <para>
  86. Il est aussi possible d'utiliser une méthode statique comme fonction de rappel:
  87. </para>
  88. <programlisting language="php"><![CDATA[
  89. class MyClass
  90. {
  91. public static function test($value)
  92. {
  93. // Validation ici
  94. return true;
  95. }
  96. }
  97. $valid = new Zend_Validate_Callback(array('MyClass', 'test'));
  98. if ($valid->isValid($input)) {
  99. // input semble valide
  100. } else {
  101. // input est invalide
  102. }
  103. ]]></programlisting>
  104. <para>
  105. Enfin, PHP 5.3 définit la méthode magique <methodname>__invoke()</methodname>.
  106. Si vous l'utilisez, alors un simple objet suffira comme fonction de rappel:
  107. </para>
  108. <programlisting language="php"><![CDATA[
  109. class MyClass
  110. {
  111. public function __invoke($value)
  112. {
  113. // Validation ici
  114. return true;
  115. }
  116. }
  117. $object = new MyClass();
  118. $valid = new Zend_Validate_Callback($object);
  119. if ($valid->isValid($input)) {
  120. // input semble valide
  121. } else {
  122. // input est invalide
  123. }
  124. ]]></programlisting>
  125. </sect3>
  126. <sect3 id="zend.validate.set.callback.options">
  127. <title>Ajouter des options</title>
  128. <para>
  129. <classname>Zend_Validate_Callback</classname> permet d'utiliser des options, celles-ci
  130. seront alors passées comme argument supplémentaires à la fonction de callback.
  131. </para>
  132. <para>
  133. Soit la définition suivante:
  134. </para>
  135. <programlisting language="php"><![CDATA[
  136. class MyClass
  137. {
  138. function myMethod($value, $option)
  139. {
  140. // De la validation ici
  141. return true;
  142. }
  143. }
  144. ]]></programlisting>
  145. <para>
  146. Il extsite deux manières d'indiquer des options au validateur : via le constructeur ou sa
  147. méthode <methodname>setOptions()</methodname>.
  148. </para>
  149. <para>
  150. Via le constructeur, passez un tableau contenant les clés "callback" et "options":
  151. </para>
  152. <programlisting language="php"><![CDATA[
  153. $valid = new Zend_Validate_Callback(array(
  154. 'callback' => array('MyClass', 'myMethod'),
  155. 'options' => $option,
  156. ));
  157. if ($valid->isValid($input)) {
  158. // input semble valide
  159. } else {
  160. // input est invalide
  161. }
  162. ]]></programlisting>
  163. <para>
  164. Sinon, vous pouvez passer les options après:
  165. </para>
  166. <programlisting language="php"><![CDATA[
  167. $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
  168. $valid->setOptions($option);
  169. if ($valid->isValid($input)) {
  170. // input semble valide
  171. } else {
  172. // input est invalide
  173. }
  174. ]]></programlisting>
  175. <para>
  176. Si des valeurs supplémentaires sont passées à <methodname>isValid()</methodname> elles
  177. seront utilisées comme arguments supplémentaires lors de l'appel à la fonction de rappel,
  178. mais avant les options <varname>$options</varname>.
  179. </para>
  180. <programlisting language="php"><![CDATA[
  181. $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
  182. $valid->setOptions($option);
  183. if ($valid->isValid($input, $additional)) {
  184. // input semble valide
  185. } else {
  186. // input est invalide
  187. }
  188. ]]></programlisting>
  189. <para>
  190. Lors de l'appel à la fonction de rappel, la valeur à valider sera toujours passée comme premier argument
  191. à la fonction de rappel suivie de toutes les autres valeurs passées à
  192. <methodname>isValid()</methodname>; les autres options suivront. Le nombre et le type d'options qui
  193. peuvent être utilisées est illimité.
  194. </para>
  195. </sect3>
  196. </sect2>
  197. <!--
  198. vim:se ts=4 sw=4 et:
  199. -->