YiiConf 2017 всё ближе! Не забудьте купить билет.

Краткий справочник по валидации

Данный справочник описывает валидацию в моделях и собран из официальной документации и
кода. Цель — получить всю информацию в одном месте в удобном виде. Это не вводная статья по
валидации в моделях.

Как работает валидация

Класс 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 ищет валидатор в определённом порядке:

  1. Метод модели с тем же именем, что указано в массиве.
  2. Встроенный валидатор Yii, унаследованный от CValidator.
  3. Путь или псевдоним, указывающий на свой валидатор, унаследованный от 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, применяет к данным фильтр.

    • filter, метод-фильтр.
  • 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.

Это стоит изучить