Написание валидаторовZend_Validate предоставляет набор наиболее часто используемых валидаторов, но разработчики часто сталкиваются с такими ситуациями, когда требуется написание своих валидаторов. В этом разделе описан процесс написания своих валидаторов.
Zend_Validate_Interface определяет три метода:
Как вы наверное уже поняли из приведенного выше описания интерфейса Zend_Validate_Interface, классы валидации, предоставляемые Zend Framework, возвращают булево значение, означающее успех/неуспех валидации. Они также предоставляют информацию о том почему переданное значение не прошло валидацию. Возможность узнать причину того, почему значение не проходит валидацию, может быть полезна для различных целей, как, например, создание статистики для анализа удобства использования приложения.
Базовый функционал для сообщений об ошибке валидации реализован в
классе Zend_Validate_Abstract.
Для того, чтобы использовать этот функционал при создании класса
валидации, просто наследуйте свой класс от
Zend_Validate_Abstract.
В классе-наследнике вы можете реализовать логику метода
Обычно метод Example #1 Создание простого класса валидации
Следующий пример демонстрирует создание простейшего валидатора.
В данном случае правила валидации просты - входное значение
должно иметь тип
%value% .
Вызов _setValue() подготавливает объект к подстановке
проверяемого значения в сообщение об ошибке.
Вызов _error() устанавливает причину ошибки валидации.
Поскольку в этом классе только одно сообщение об ошибке,
то нет необходимости передавать методу _error()
имя шаблона сообщения об ошибке.
Example #2 Написание классов валидации с подчиненными условиями Следующий пример демонстрирует более сложный набор правил валидации, где требуется, чтобы входное значение было числом, находящимся в диапазоне между минимальным и максимальным значениями. Значение может не пройти валидацию по одной из следующих причин:
Эти возможные причины переводятся в определения в классе:
min и max
в качестве магических параметров в шаблонах сообщений, так же,
как и value .
Обратите вмимание, что если какая-либо из проверок в методе
Example #3 Валидация с независимыми условиями и возвратом нескольких причин непрохождения валидации Рассмотрим написание класса валидации для обеспечения стойкости пароля, где от пользователя требуется выбрать пароль, который соответствует определенным критериям в целях защиты пользовательского аккаунта. Предположим, что критерии безопасности требуют, чтобы пароль:
Следующий класс реализует эти критерии валидации:
isValid() не сразу же возвращают FALSE.
Это позволяет классу валидации предоставлять
все причины того, почему
введенный пароль не отвечает требованиям валидации.
Если, например, пользователь введет строку "#$% "
в качестве пароля, то после isValid()
вызов getMessages() вернет все четыре
сообщения ошибки валидации.
|