<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.validate.validator_chains">
    <title>Chaînes de validation</title>

    <para>
        Souvent, de multiples validations doivent être appliquées à une valeur dans un ordre
        particulier. Le code suivant décrit une méthode permettant de solutionner l'exemple de <link
        linkend="zend.validate.introduction">l'introduction</link>, dans lequel un identifiant doit
        contenir précisément entre 6 et 12 caractères alphanumériques. <programlisting
        role="php"><![CDATA[
// Creation d'une chaine de validateurs et ajout de validateurs
$validateurChaine = new Zend_Validate();
$validateurChaine->addValidator(
                    new Zend_Validate_StringLength(array('min' => 6,
                                                         'max' => 12)))
                 ->addValidator(new Zend_Validate_Alnum());

// Validation de l'identifiant
if ($validateurChaine->isValid($identifiant)) {
    // l'identifiant est testé avec succès
} else {
    // l'identifiant échoue aux tests, afficher pourquoi
    foreach ($validateurChaine->getMessages() as $message) {
        echo "$message\n";
    }
}
]]></programlisting> Les validateurs sont exécutés dans leur ordre d'ajout à
        <classname>Zend_Validate</classname>. Dans l'exemple ci-dessus, l'identifiant est d'abord
        testé pour vérifier que sa longueur est bien comprise entre 6 et 12 caractères, puis ensuite
        testé pour vérifier qu'il ne contient bien que des caractères alphanumériques. Le second
        test est exécuté quelque soit le résultat du précédent. Ainsi, dans le cas où les deux tests
        échouent, <methodname>getMessages()</methodname> retournera un message d'échec pour chacun des
        validateurs.
    </para>

    <para>
        Dans certains cas, il peut être utile d'interrompre le processus si l'un des tests
        échoue. <classname>Zend_Validate</classname> permet ce cas de figure via l'usage du deuxième
        paramètre de la méthode <methodname>addValidator()</methodname>. En positionnant
        <varname>$breakChainOnFailure</varname> à <constant>TRUE</constant>, le validateur ajouté interrompra la
        procédure de test s'il échoue, ce qui permet d'éviter de lancer tout autre test qui serait
        inutile ou inapproprié dans ce cas de figure. Si l'exemple précédent était écrit comme suit,
        la validation alphanumérique ne serait pas lancé si la vérification de la longueur de la
        valeur échouait : <programlisting language="php"><![CDATA[
$validateurChaine->addValidator(
                    new Zend_Validate_StringLength(array('min' => 6,
                                                         'max' => 12)),
                    true)
                 ->addValidator(new Zend_Validate_Alnum());
]]></programlisting></para>

    <para>
        Tout objet qui implémente <classname>Zend_Validate_Interface</classname> peut être
        utilisé dans une chaîne de validation.
    </para>
</sect1>