Краткий справочник по валидации
Данный справочник описывает валидацию в моделях и собран из официальной документации и кода. Цель — получить всю информацию в одном месте в удобном виде. Это не вводная статья по валидации в моделях.
Как работает валидация
Класс CModel использует метод CModel::rules() для задания правил валидации. Правила возвращаются в виде массива:
public function rules(){ return array( array('username, password', 'required'), array('password_repeat', 'required', 'on'=>'register'), array('password', 'compare', 'on'=>'register'), ); }
Приведённый код — пример того, как может быть реализован метод CModel::rules(). Каждый из внутренних массивов определяет своё правило валидации.
Выбор валидаторов
Yii ищет валидатор в определённом порядке:
- Метод модели с тем же именем, что указано в массиве.
- Встроенный валидатор Yii, унаследованный от CValidator.
- Путь или псевдоним, указывающий на свой валидатор, унаследованный от CValidator.
Сценарии
Ждём появления дополнений в оригинале статьи.
Стандартные параметры
array( 'список полей модели', 'валидатор', 'on'=>'имя сценария', 'message'=>'сообщение об ошибке', …параметры валидации… );
- список полей модели: поля модели для валидации, разделённые запятыми;
- валидатор: определяет, какой валидатор использовать;
- on: определяет сценарий, для которого производится валидация. При указании нескольких сценариев, они разделяются запятыми. Если параметр не задан, правило применяется для всех сценариев;
- message: сообщение, выдающееся при ошибке валидации;
- …параметры валидации…: один или несколько дополнительных параметров, передающихся указанному валидатору.
Стандартные правила валидации
boolean: CBooleanValidator, проверят, что значение переменной равняетсяtrueValueилиfalseValue.- allowEmpty, может ли значение равняться
nullили быть пустым. - falseValue, значение
falseValue. - strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
- trueValue, значение
trueValue.
- allowEmpty, может ли значение равняться
captcha: CCaptchaValidator, проверяет, что значение поля модели соответствует проверочному коду CAPTCHA.- allowEmpty, может ли значение равняться
nullили быть пустым. - captchaAction, ID действия, показывающего изображение CAPTCHA.
- caseSensitive, использовать ли регистрозависимую проверку.
- allowEmpty, может ли значение равняться
compare: CCompareValidator, сравнивает значение указанного поля модели с значением другого поля и проверяет, равны ли они.- allowEmpty, может ли значение равняться
nullили быть пустым. - compareAttribute, имя атрибута, с которым будет производится сравнение.
- compareValue, постоянное значение, с которым будет производится сравнение.
- operator, оператор, используемый при сравнении.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
- allowEmpty, может ли значение равняться
default: CDefaultValueValidator, инициализирует атрибуты указанным значением. Валидацию при этом не выполняет. Нужен для указания значений по умолчанию.- setOnEmpty, устанавливать значение по умолчанию только если значение равно
nullили пустой строке. - value, значение по умолчанию.
- setOnEmpty, устанавливать значение по умолчанию только если значение равно
email: CEmailValidator, проверяет, что значение является адресом email.- allowEmpty, может ли значение равняться
nullили быть пустым. - allowName, разрешать ли включать имя в адрес email.
- checkMX, проверять ли запись MX.
- checkPort, проверять ли 25-й порт.
- fullPattern, регулярное выражение, используемое для проверки адреса с именем.
- pattern, регулярное выражение, используемое для проверки адреса без имени.
- allowEmpty, может ли значение равняться
date: CDateValidator, проверяет, что значение является датой, временем или и тем и другим вместе.- allowEmpty, может ли значение равняться
nullили быть пустым. - format, формат значения. Может быть массивом или строкой. По умолчанию равняется 'MM/dd/yyyy'. Остальные форматы описаны в API CDateTimeParser.
- timestampAttribute, имя атрибута, в который будет записан результат разбора даты.
По умолчанию равен
null.
- allowEmpty, может ли значение равняться
exist: CExistValidator, проверяет, есть ли значение атрибута в определённой таблице.- allowEmpty, может ли значение равняться
nullили быть пустым. - attributeName, имя атрибута класса ActiveRecord, используемое для проверки значения.
- className, имя класса ActiveRecord, используемого для проверки.
- criteria, дополнительный критерий запроса.
- allowEmpty, может ли значение равняться
file: CFileValidator, проверяет, был ли загружен файл.- allowEmpty, можно ли не загружать файл и оставить поле пустым.
- maxFiles, максимальное количество файлов.
- maxSize, максимальный размер в байтах.
- minSize, минимальный размер в байтах.
- tooLarge, сообщение об ошибке, выдаваемое если файл слишком большой.
- tooMany, сообщение, выдаваемое если загружено слишком много файлов.
- tooSmall, сообщение, выдаваемое если загруженный файл слишком мал.
- types, список расширений файлов, которые позволено загружать.
- wrongType, сообщение, выдаваемое если данный тип файла загружать нельзя.
filter: CFilterValidator, применяет к данным фильтр.- filter, метод-фильтр.
in: CRangeValidator, проверяет, входит ли значение в заданный интервал или список значений.- allowEmpty, может ли значение равняться
nullили быть пустым. - range, список допустимых значений или допустимый интервал.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
- not, позволяет проверить исключение из интервала вместо вхождения в него.
- allowEmpty, может ли значение равняться
length: CStringValidator, проверяет, что количество введённых символов соответствует некоторому значению.- allowEmpty, может ли значение равняться
nullили быть пустым. - encoding, кодировка проверяемой строки.
- is, точное количество символов.
- max, максимальное количество символов.
- min, минимальное количество символов.
- tooShort, сообщение об ошибке, выдаваемое если количество символов слишком мало.
- tooLong, сообщение об ошибке, выдаваемое если количество символов слишком велико.
- allowEmpty, может ли значение равняться
numerical: CNumberValidator, проверяет, что значение является числом в определённом интервале.- allowEmpty, может ли значение равняться
nullили быть пустым. - integerOnly, только целые числа.
- max, максимальное значение.
- min, минимальное значение.
- tooBig, сообщение об ошибке, выдаваемое если значение слишком велико.
- tooSmall, сообщение об ошибке, выдаваемое если значение слишком мало.
- allowEmpty, может ли значение равняться
match: CRegularExpressionValidator, проверяет, совпадает ли значение с регулярным выражением.- allowEmpty, может ли значение равняться
nullили быть пустым. - pattern, регулярное выражение.
- allowEmpty, может ли значение равняться
required: CRequiredValidator, проверяет, что значение не равноnullи не является пустым.- requiredValue, значение, которое должен иметь атрибут.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
safe: CSafeValidator, помечает атрибут безопасным для массового присваивания.type: CTypeValidator, сверяет тип атрибута с указанным (integer,float,string,date,time,datetime). Для валидации дат с версии 1.1.7 лучше использовать CDateValidator.- allowEmpty, может ли значение равняться
nullили быть пустым. - dateFormat, формат для валидации дат.
- datetimeFormat, формат для валидации даты и времени.
- timeFormat, формат для валидации времени.
- type, тип данных.
- allowEmpty, может ли значение равняться
unique: CUniqueValidator, проверяет значение на уникальность.- allowEmpty, может ли значение равняться
nullили быть пустым. - attributeName, имя атрибута класса ActiveRecord, используемое для проверки значения.
- caseSensitive, является ли сравнение регистронезависимым.
- className, имя класса ActiveRecord, используемого для проверки.
- criteria, дополнительный критерий запроса.
- allowEmpty, может ли значение равняться
unsafe: CUnsafeValidator, помечает атрибут небезопасным для массового присваивания.url: CUrlValidator, проверяет, что значения является верным URL http или https.- allowEmpty, может ли значение равняться
nullили быть пустым. - pattern, регулярное выражение, используемое при валидации.
- allowEmpty, может ли значение равняться
Это стоит изучить
- Работа с формами → Создание модели
- CModel::validate()
- CModel::rules()
- CModel::scenario
- CValidator
- CInlineValidator
Оригинал: http://www.yiiframework.com/doc/cookbook/56/Перевод: Александр Макаров, Sam Dark (rmcreative.ru)Обсуждение и комментарии: http://yiiframework.ru/forum/viewtopic.php?f=8&t=482
