<sect1 id="zend.validate.validator_chains">

    <title>שרשור פונקציות אימות</title>

    <para>
        לפעמים יהיה צורך בלבצע מספר בדיקות ואימותים שונים על אותו ערך בסדר מסויים. הדוגמא הבאה מציגה כיצד לפתור את הבעיה אשר מוצגת <link linkend="zend.validate.introduction">בהקדמה</link>,
        איפה ששם המשתמש צריך להיות בין 6 ל 12 תווים ובאותיות בלבד:

        <programlisting role="php"><![CDATA[
// Create a validator chain and add validators to it
$validatorChain = new Zend_Validate();
$validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
               ->addValidator(new Zend_Validate_Alnum());

// Validate the username
if ($validatorChain->isValid($username)) {
    // username passed validation
} else {
    // username failed validation; print reasons
    foreach ($validatorChain->getMessages() as $message) {
        echo "$message\n";
    }
}
]]>
        </programlisting>
        הפונקציות מורצות בסדר בהם הם מתווספות ל <code>Zend_Validate</code>. בדוגמא למעלה, שם המשתמש קודם נבדדק שהוא בין 6 ל 12 תווים, ואז הוא נבדק כדי לוודאות שהוא מכיל רק אותיות ומספרים.
        הבדיקה השנייה תמיד תרוץ, גם אם שם המשתמש הוא לא בטווח של 6 עד 12 והבדיקה הראשונה תחזיר שגיאה הבדיקה השנייה תרוץ גם כן ובמידה והיא גם תחזיר פסוק שקר גם היא תחזיר שגיאה,
        לאחר מכן במידה ושני הבדיקות נכשלו <code>getMessages()</code> יחזיר את הודעות השגיאה משני הבדיקות.
    </para>

    <para>
        בחלק מהמקרים זה הגיוני לשבור את שרשרת הבדיקות במידה ואחת מהבדיקות מחזירה פסוק שקר.
        <code>Zend_Validate</code> תומכת בסוג פעולה זה על ידי הוספת פרמטר שני למתודת <code>addValidator()</code>.
        על ידי הצבת ערך <code>true</code> לפרמטר השני שהוא בעצם <code>$breakChainOnFailure</code> הבדיקה שנוספה תשבור את השרשרת במידה והיא תחזיר פסוק שקר אשר יעצרו וימנעו מהרצה של פונקציות בדיקה נוספות שבאות לאחר מכן.
        אם הדוגמא למעלה הייתה כתובה כך, אז הבדיקה של אימות שם המשתמש שהוא אותיות ומספרים בלבד לא הייתה מתבצעת במידה והבדיקה הראשונה תחזיר פסוק שקר:

        <programlisting role="php"><![CDATA[
$validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
        ->addValidator(new Zend_Validate_Alnum());
]]>
        </programlisting>

    </para>

    <para>
        כל אובייקט אשר מיישם את <code>Zend_Validate_Interface</code> יכול להתקיים בתור שרשרת האימות.
    </para>

</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
