Zend_Validate-Callback.xml 6.3 KB

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