Этот способ определения позволяет лучше контролировать работу правил валидации. Но перед тем, как мы обсудим это, давайте посмотрим на образец добавления правила для отдельного поля:
<?var $validate = array(
'fieldName1' => array(
'rule' => 'ruleName', // или: array('ruleName', 'param1', 'param2' ...)
'required' => true,
'allowEmpty' => false,
'on' => 'create', // или: 'update'
'message' => 'Ваше сообщение об ошибке'
));
?>
Индекс 'rule' обязателен. Если вы установите только 'required' => true, то валидация не будет корректно функционировать. Это потому, что 'required' не является правилом.
Как вы видите, каждое поле (в данном случае показано только одно поле) ассоциируется с массивом, который содержит пять индексов: 'rule', 'required', 'allowEmpty', 'on' и 'message'. Давайте ближе познакомимся с этими индексами.
Индекс 'rule' определяет метод валидации и принимает или отдельное значение, или массив. Значением 'rule' может быть имя метода модели, метода встроенного класса Validation, или регулярное выражение. Полный перечень всех встроенных правил смотрите в главе «Встроенные правила валидации».
Если правило не требует параметров, то 'rule' может содержать просто одно значение, например:
<?var $validate = array(
'login' => array(
'rule' => 'alphaNumeric'
));
?>
Если правило требует некоторые параметры (подобные max, min или range), то 'rule' должно быть массивом:
<?var $validate = array(
'password' => array(
'rule' => array('minLength', 8) )
);
?>
Помните, что индекс 'rule' требуется для определения правил на основе массивов.
Этому индексу должно быть присвоено значение типа boolean. Если 'required' => true, то поле должно быть представлено в массиве данных. Например, если правило валидации определено таким образом:
<?var $validate = array(
'login' => array(
'rule' => 'alphaNumeric',
'required' => true
));
?>
Тогда данные, посланные методу save() должны содержать данные для поля 'login'. Если это не так, то валидация не будет пройдена. Значение по умолчанию для этого индекса – false.
Если индекс 'login' представлен, но сопутствующее значение пустое, то валидация пройдет успешно. 'required' => true контролирует только наличие индекса поля.
Индексу allowEmpty должно быть присвоено значения типа boolean. Если true, то правило валидации будет пропущено, когда значение пустое.
Значение по умолчанию – false, таким образом, правило будет выполняться (это не значит, что валидация не будет пройдена для пустого значения; если определено правило принимать пустые значения, как правильные, то ошибка проверки данных не будет генерироваться).
Индексу 'on' может быть присвоено одно из следующих значений: 'update' или 'create'. Это предоставляет механизм, который позволяет применять определенное правило или во время создания новой записи, или во время обновления.
Если правило определено с 'on' => 'create', то оно будет применено во время создания новой записи. Подобным образом, если определено 'on' => 'update', то правило будет выполняться во время обновления записи.
Значения по умолчанию для 'on' – null. Т.е. правило будет действовать в обоих случаях: во время создания записи и во время обновления.
Индекс 'message' позволяет вам определить собственное сообщение об ошибке валидации для правила:
<?var $validate = array(
'password' => array(
'rule' => array('minLength', 8),
'message' => 'Длина пароля должна быть не менее 8 символов'
));
?>