Если среди встроенных правил вы не нашли то, что вам нужно, то вы можете создать ваше собственное правило валидации. Сделать это вы можете двумя способами: определением собственного регулярного выражения или созданием собственного метода валидации.
В примере ниже проверяется, чтобы поле login содержало только буквы и цифры и было длиной не менее 3 символов.
<?var $validate = array(
'login' => array(
'rule' => array('custom', '/^[a-z0-9]{3,}$/i'),
'message' => 'Логин должен содержать только буквы и цифры. Минимум 3 символа.'
));
?>
В некоторых случаях не достаточно проверки данных с помощью регулярных выражений. Например, если вы хотите проверить, чтобы льготный код был использован только 25 раз. Тогда вам необходимо добавить вашу собственную функцию, как показано ниже:
<?phpclass User extends AppModel { var
$name = 'User';
var
$validate = array(
'promotion_code' => array(
'rule' => array('limitDuplicates', 25),
'message' => 'Этот код был уже использован много раз.'
) );
function
limitDuplicates($data, $limit){
$existing_promo_count = $this->find( 'count', array('conditions' => $data, 'recursive' => -1) ); return
$existing_promo_count < $limit; }
}
?>
Если вы хотите передать параметры в вашу функцию, то добавьте дополнительные элементы в массив 'rule', и обрабатывайте их как дополнительные параметры (после основного параметра $data) в вашей функции.
Ваша функция для валидации может быть размещена в модели (как это сделано в примере выше), или в поведении, которое осуществляет модель.
Помните, что методы модели/поведения проверяются первые, перед поиском метода в классе Validation. Это означает, что вы можете заменить существующие методы валидации (такие, как alphaNumeric())
на уровне приложения (добавив метод в AppModel), или на уровне модели.
<< Встроенные правила валидации | Валидация данных из контроллера >>