Zend_Validate-Callback.xml 7.2 KB

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