| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.validate.validator_chains">
- <title>Validator Chains</title>
- <para>
- Often multiple validations should be applied to some value in a particular order. The
- following code demonstrates a way to solve the example from the
- <link linkend="zend.validate.introduction">introduction</link>, where a username must be
- between 6 and 12 alphanumeric characters:
- <programlisting language="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>
- Validators are run in the order they were added to <classname>Zend_Validate</classname>. In
- the above example, the username is first checked to ensure that its length is between 6 and
- 12 characters, and then it is checked to ensure that it contains only alphanumeric
- characters. The second validation, for alphanumeric characters, is performed regardless of
- whether the first validation, for length between 6 and 12 characters, succeeds. This means
- that if both validations fail, <code>getMessages()</code> will return failure messages from
- both validators.
- </para>
- <para>
- In some cases it makes sense to have a validator break the chain if its validation process
- fails. <classname>Zend_Validate</classname> supports such use cases with the second
- parameter to the <code>addValidator()</code> method. By setting
- <code>$breakChainOnFailure</code> to <constant>TRUE</constant>, the added validator will break the
- chain execution upon failure, which avoids running any other validations that are determined
- to be unnecessary or inappropriate for the situation. If the above example were written as
- follows, then the alphanumeric validation would not occur if the string length validation
- fails:
- <programlisting language="php"><![CDATA[
- $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
- ->addValidator(new Zend_Validate_Alnum());
- ]]></programlisting>
- </para>
- <para>
- Any object that implements <classname>Zend_Validate_Interface</classname> may be used in a
- validator chain.
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|