1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21740 -->
4 <sect2 id="zend.validate.set.callback">
5 <title>Callback (fonction de rappel)</title>
8 <classname>Zend_Validate_Callback</classname> permet de fournir une fonction de rappel
9 utilisée pour valider la valeur.
12 <sect3 id="zend.validate.set.callback.options">
13 <title>Options supportées par Zend_Validate_Callback</title>
16 Les options suivantes sont supportées par
17 <classname>Zend_Validate_Callback</classname> :
23 <emphasis><property>callback</property></emphasis> : spécifie la fonction
24 de rappel qui sera utilisée pour la validation.
30 <emphasis><property>options</property></emphasis> : spécifie les options
31 additionnelles qui seront fournies à la fonction de rappel.
37 <sect3 id="zend.validate.set.callback.basic">
38 <title>Utilisation classique</title>
41 Le plus simple est de posséder une fonction classique, qui sera utilisée
42 pour valider la donnée. Soit la fonction ci-après :
45 <programlisting language="php"><![CDATA[
46 function myMethod($value)
48 // ici de la validation à effectuer
54 Pour l'utiliser avec<classname>Zend_Validate_Callback</classname> vous devez simplement
55 effectuer votre appel comme ceci:
58 <programlisting language="php"><![CDATA[
59 $valid = new Zend_Validate_Callback('myMethod');
60 if ($valid->isValid($input)) {
61 // input semble valide
68 <sect3 id="zend.validate.set.callback.closure">
69 <title>Utilisation avec les fonctions anonymes (closures)</title>
72 PHP 5.3 introduit les <ulink url="http://php.net/functions.anonymous">fonctions
73 anonymes</ulink> ou fonctions de <emphasis>fermeture</emphasis>. PHP traite les
74 fonctions anonymes comme des fonctions de rappel valides, et il est donc
75 possible d'utiliser celles-ci avec <classname>Zend_Validate_Callback</classname>.
79 <programlisting language="php"><![CDATA[
80 $valid = new Zend_Validate_Callback(function($value){
85 if ($valid->isValid($input)) {
86 // input semble valide
93 <sect3 id="zend.validate.set.callback.class">
94 <title>Utilisation avec les méthodes de rappel</title>
97 Bien sûr, il est aussi possible d'utiliser des méthodes de rappel:
100 <programlisting language="php"><![CDATA[
103 public function myMethod($value)
112 La définition de la fonction de rappel se fait alors dans un tableau contenant un
113 objet de la classe et la méthode à appeler:
116 <programlisting language="php"><![CDATA[
117 $object = new MyClass;
118 $valid = new Zend_Validate_Callback(array($object, 'myMethod'));
119 if ($valid->isValid($input)) {
120 // input semble valide
122 // input est invalide
127 Il est aussi possible d'utiliser une méthode statique comme fonction de rappel:
130 <programlisting language="php"><![CDATA[
133 public static function test($value)
140 $valid = new Zend_Validate_Callback(array('MyClass', 'test'));
141 if ($valid->isValid($input)) {
142 // input semble valide
144 // input est invalide
149 Enfin, PHP 5.3 définit la méthode magique <methodname>__invoke()</methodname>.
150 Si vous l'utilisez, alors un simple objet suffira comme fonction de rappel:
153 <programlisting language="php"><![CDATA[
156 public function __invoke($value)
163 $object = new MyClass();
164 $valid = new Zend_Validate_Callback($object);
165 if ($valid->isValid($input)) {
166 // input semble valide
168 // input est invalide
173 <sect3 id="zend.validate.set.callback.options2">
174 <title>Ajouter des options</title>
177 <classname>Zend_Validate_Callback</classname> permet d'utiliser des options, celles-ci
178 seront alors passées comme argument supplémentaires à la fonction de callback.
182 Soit la définition suivante:
185 <programlisting language="php"><![CDATA[
188 function myMethod($value, $option)
190 // De la validation ici
197 Il extsite deux manières d'indiquer des options au validateur : via le constructeur ou sa
198 méthode <methodname>setOptions()</methodname>.
202 Via le constructeur, passez un tableau contenant les clés "callback" et "options":
205 <programlisting language="php"><![CDATA[
206 $valid = new Zend_Validate_Callback(array(
207 'callback' => array('MyClass', 'myMethod'),
208 'options' => $option,
211 if ($valid->isValid($input)) {
212 // input semble valide
214 // input est invalide
219 Sinon, vous pouvez passer les options après:
222 <programlisting language="php"><![CDATA[
223 $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
224 $valid->setOptions($option);
226 if ($valid->isValid($input)) {
227 // input semble valide
229 // input est invalide
234 Si des valeurs supplémentaires sont passées à <methodname>isValid()</methodname> elles
235 seront utilisées comme arguments supplémentaires lors de l'appel à la fonction de rappel,
236 mais avant les options <varname>$options</varname>.
239 <programlisting language="php"><![CDATA[
240 $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
241 $valid->setOptions($option);
243 if ($valid->isValid($input, $additional)) {
244 // input semble valide
246 // input est invalide
251 Lors de l'appel à la fonction de rappel, la valeur à valider sera toujours passée comme premier argument
252 à la fonction de rappel suivie de toutes les autres valeurs passées à
253 <methodname>isValid()</methodname>; les autres options suivront. Le nombre et le type d'options qui
254 peuvent être utilisées est illimité.