| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <?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:
- </para>
- <programlisting language="php"><![CDATA[
- // Create a validator chain and add validators to it
- $validatorChain = new Zend_Validate();
- $validatorChain->addValidator(
- new Zend_Validate_StringLength(array('min' => 6,
- 'max' => 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>
- <para>
- 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, <methodname>getMessages()</methodname> 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 <methodname>addValidator()</methodname> method. By setting
- <varname>$breakChainOnFailure</varname> 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:
- </para>
- <programlisting language="php"><![CDATA[
- $validatorChain->addValidator(
- new Zend_Validate_StringLength(array('min' => 6,
- 'max' => 12)),
- true)
- ->addValidator(new Zend_Validate_Alnum());
- ]]></programlisting>
- <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:
- -->
|