Programmer's Reference Guide
| Standard Validation Classes |
Цепочки валидаторов
Часто к одному и тому же значению должно быть применено несколько валидаций в определенном порядке. Следующий код демонстрирует способ решения примера из введения, где имя пользователя должно быть длиной от 6 до 12 символов и состоять только из алфавитно-цифровых символов:
- // Создает цепочку валидаторов и добавляет валидаторы в нее
- $validatorChain = new Zend_Validate();
- $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
- ->addValidator(new Zend_Validate_Alnum());
- // Валидация имени пользователя
- if ($validatorChain->isValid($username)) {
- // имя пользователя прошло валидацию
- } else {
- // имя пользователя не прошло валидацию; вывод причин этого
- foreach ($validatorChain->getMessages() as $message) {
- echo "$message\n";
- }
- }
getMessages() вернет сообщения об
ошибках валидации от обоих валидаторов.
В некоторых случаях имеет смысл прерывать валидацию, если данные не
прошли проверку каким-либо валидатором в цепочке.
Zend_Validate обеспечивает эту возможность с
помощью второго параметра метода addValidator(). При
установке $breakChainOnFailure в TRUE,
добавленный валидатор будет прерывать выполнение цепочки валидаций в
случае неудачи. Это позволяет избежать выполнения других валидаций,
которые были бы излишними или неподходящими в данной ситуации.
Ниже приводится переписанный пример, в котором проверка на
алфавитно-цифровые символы не должна
производиться, если не была пройдена проверка на длину строки:
- $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
- ->addValidator(new Zend_Validate_Alnum());
Любые объекты, реализующие Zend_Validate_Interface, могут быть использованы в цепочке валидаторов.
| Standard Validation Classes |
