Краткий справочник по валидации
Данный справочник описывает валидацию в моделях и собран из официальной документации и
кода. Цель — получить всю информацию в одном месте в удобном виде. Это не вводная статья по
валидации в моделях.
Как работает валидация
Класс 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'=>'имя сценария',
'except'=>'имя сценария',
'message'=>'сообщение об ошибке',
…параметры валидации…
);
- список полей модели: поля модели для валидации, разделённые запятыми;
- валидатор: определяет, какой валидатор использовать;
- on: определяет сценарий, для которого производится валидация. При указании нескольких
сценариев, они разделяются запятыми. Если параметр не задан, правило применяется для всех
сценариев;
- except: определяет сценарий, при котором указанное правило валидации игнорируется. При указании нескольких
сценариев, они разделяются запятыми.
- message: сообщение, выдающееся при ошибке валидации;
- …параметры валидации…: один или несколько дополнительных параметров, передающихся указанному валидатору.
Стандартные правила валидации
boolean
: CBooleanValidator, проверят, что значение переменной равняется trueValue
или falseValue
.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- falseValue, значение
falseValue
.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
- trueValue, значение
trueValue
.
captcha
: CCaptchaValidator, проверяет, что значение поля модели соответствует проверочному
коду CAPTCHA.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- captchaAction, ID действия, показывающего изображение CAPTCHA.
- caseSensitive, использовать ли регистрозависимую проверку.
compare
: CCompareValidator, сравнивает значение указанного поля модели с значением другого
поля и проверяет, равны ли они.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- compareAttribute, имя атрибута, с которым будет производится сравнение.
- compareValue, постоянное значение, с которым будет производится сравнение.
- operator, оператор, используемый при сравнении.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
default
: CDefaultValueValidator, инициализирует атрибуты указанным значением.
Валидацию при этом не выполняет. Нужен для указания значений по умолчанию.
- setOnEmpty, устанавливать значение по умолчанию только если значение равно
null
или пустой строке.
- value, значение по умолчанию.
email
: CEmailValidator, проверяет, что значение является адресом email.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- allowName, разрешать ли включать имя в адрес email.
- checkMX, проверять ли запись MX.
- checkPort, проверять ли 25-й порт.
- fullPattern, регулярное выражение, используемое для проверки адреса с именем.
- pattern, регулярное выражение, используемое для проверки адреса без имени.
- validateIDN, проверять ли адрес с IDN (internationalized domain names, интернационализованные доменные имена).
По умолчанию адрес содержащий IDN всегда будет неверным (значение false). Появилось в версии 1.1.13.
date
: CDateValidator, проверяет, что значение является датой, временем или
и тем и другим вместе.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- format, формат значения. Может быть массивом или строкой. По умолчанию равняется
'MM/dd/yyyy'. Остальные форматы описаны в API CDateTimeParser.
- timestampAttribute, имя атрибута, в который будет записан результат разбора даты.
По умолчанию равен null
.
exist
: CExistValidator, проверяет, есть ли значение атрибута в определённой таблице.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- attributeName, имя атрибута класса ActiveRecord, используемое для проверки значения.
- className, имя класса ActiveRecord, используемого для проверки.
- criteria, дополнительный критерий запроса.
file
: CFileValidator, проверяет, был ли загружен файл.
- allowEmpty, можно ли не загружать файл и оставить поле пустым.
- maxFiles, максимальное количество файлов.
- maxSize, максимальный размер в байтах.
- minSize, минимальный размер в байтах.
- tooLarge, сообщение об ошибке, выдаваемое если файл слишком большой.
- tooMany, сообщение, выдаваемое если загружено слишком много файлов.
- tooSmall, сообщение, выдаваемое если загруженный файл слишком мал.
- types, список расширений файлов, которые позволено загружать.
- wrongType, сообщение, выдаваемое если данный тип файла загружать нельзя.
- mimeTypes, список MIME-типов файлов, которые позволено загружать. Можно использовать при условии, что
установлено PECL-расширение fileinfo. Появилось в версии 1.1.11.
- wrongMimeType, сообщение, выдаваемое если данный тип файла загружать нельзя. Можно использовать при условии,
что установлено PECL-расширение fileinfo. Появилось в версии 1.1.11.
filter
: CFilterValidator, применяет к данным фильтр.
in
: CRangeValidator, проверяет, входит ли значение в заданный интервал или список значений.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- range, список допустимых значений или допустимый интервал.
- strict, является ли сравнение строгим: должны совпадать не только значения, но и их тип.
- not, позволяет проверить исключение из интервала вместо вхождения в него.
length
: CStringValidator, проверяет, что количество введённых символов соответствует некоторому значению.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- encoding, кодировка проверяемой строки.
- is, точное количество символов.
- max, максимальное количество символов.
- min, минимальное количество символов.
- tooShort, сообщение об ошибке, выдаваемое если количество символов слишком мало.
- tooLong, сообщение об ошибке, выдаваемое если количество символов слишком велико.
numerical
: CNumberValidator, проверяет, что значение является числом в определённом интервале.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- integerOnly, только целые числа.
- max, максимальное значение.
- min, минимальное значение.
- tooBig, сообщение об ошибке, выдаваемое если значение слишком велико.
- tooSmall, сообщение об ошибке, выдаваемое если значение слишком мало.
- integerPattern, регулярное выражение, используемое для валидации целых чисел. Используется тогда, когда
integerOnly
равно true. Появилось в версии 1.1.7.
- numberPattern, регулярное выражение, используемое для валидации чисел с плавающей точкой. Используется тогда, когда
integerOnly
равно false. Появилось в версии 1.1.7.
match
: CRegularExpressionValidator, проверяет, совпадает ли значение с регулярным выражением.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- pattern, регулярное выражение.
- not, инвертировать ли логику валидации. Если значение равно true, то проверяемое значение не должно совпадать
с регулярным выражением. Значение по умолчанию: false. Появилось в версии 1.1.5.
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, тип данных.
unique
: CUniqueValidator, проверяет значение на уникальность.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- attributeName, имя атрибута класса ActiveRecord, используемое для проверки значения.
- caseSensitive, является ли сравнение регистронезависимым.
- className, имя класса ActiveRecord, используемого для проверки.
- criteria, дополнительный критерий запроса.
unsafe
: CUnsafeValidator, помечает атрибут небезопасным для массового присваивания.
url
: CUrlValidator, проверяет, что значения является верным URL http или https.
- allowEmpty, может ли значение равняться
null
или быть пустым.
- pattern, регулярное выражение, используемое при валидации.
- validSchemes, массив с названиями допустимых схем. Схемы, допустимые по умолчанию: http и https.
Появилось в версии 1.1.7.
- defaultScheme, схема по умолчанию. Если значение не содержит схемы, то будет добавлена схема по умолчанию (таким образом, изменяется входной параметр). Значение по умолчанию равно null, что означает, что URL-адрес должен содержать часть схемы.
- validateIDN, проверять ли URL с IDN (internationalized domain names, интернационализованные доменные имена).
По умолчанию URL содержащий IDN всегда будет неверным (значение false). Появилось в версии 1.1.13.
Это стоит изучить