Если вы хотите назначить множество валидационных правил для одного поля, то вот пример того, как это должно выглядеть:
<?var $validate = array(
'fieldName' => array(
'ruleName' => array(
'rule' => 'ruleName',
// доп. индексы, наподобие 'on', 'required', и т.д. идут здесь...
),
'ruleName2' => array(
'rule' => 'ruleName2',
// доп. индексы, наподобие 'on', 'required', и т.д. идут здесь...
) )
);
?>
Как вы видите, это похоже на то, что мы делали в предыдущей главе. Там для каждого поля у нас был только один массив валидационных параметров. В данном случае, каждое 'fieldName' состоит из массива индексов правил. Каждое 'ruleName' содержит отдельный массив валидационных параметров.
Это лучше показано в практическом примере:
<?var $validate = array(
'login' => array(
'alphanumeric' => array(
'rule' => 'alphaNumeric',
'message' => 'Разрешены только буквы и цифры.',
'last' => true
),
'minlength' => array(
'rule' => array('minLength', '8'),
'message' => 'Минимальная длина - 8 символов.'
), )
);
?>
В примере, представленном выше, определены два правила для поля login: alphanumeric и minLength. Как вы видите, каждое правило идентифицировано индексом. В данном случае имена индексов совпадают с именами правил, которые они используют, но именем индекса может быть любое имя, которое вы выберете.
По умолчанию CakePHP пытается выполнить проверку поля, используя все валидационные правила, назначенные для этого поля и возвращает сообщение об ошибке для последнего невыполненного правила. Но если индекс 'last' установлен в true для правила и оно не выполняется, тогда возвращается сообщение об ошибке для этого правила и оставшиеся правила не проверяются. Таким образом, если вы предпочитаете показать сообщение об ошибке для первого невыполненного правила, то устанавливайте 'last' => true для каждого правила.
Если вы планируете использовать международные сообщения об ошибках, то вы можете определять сообщения об ошибках в вашем отображении:
<?echo $form->input('login', array(
'label' => __('Login', true),
'error' => array(
'alphanumeric' => __('Разрешены только буквы и цифры', true),
'minlength' => __('Минимальная длина - 8 символов', true) )
)
);
?>
Теперь поле полностью интернационализировано и вы можете удалить сообщения из модели. Дополнительную информацию о функции __() читайте в главе «Локализация и интернационализация».