Если среди встроенных правил вы не нашли то, что вам нужно, то вы можете создать ваше собственное правило валидации. Сделать это вы можете двумя способами: определением собственного регулярного выражения или созданием собственного метода валидации.
В примере ниже проверяется, чтобы поле login содержало только буквы и цифры и было длиной не менее 3 символов.
<?
var $validate = array(
'login' => array(
'rule' => array('custom', '/^[a-z0-9]{3,}$/i'),
'message' => 'Логин должен содержать только буквы и цифры. Минимум 3 символа.'
)
);
?>
В некоторых случаях не достаточно проверки данных с помощью регулярных выражений. Например, если вы хотите проверить, чтобы льготный код был использован только 25 раз. Тогда вам необходимо добавить вашу собственную функцию, как показано ниже:
<?php
class 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), или на уровне модели.
<< Встроенные правила валидации | Валидация данных из контроллера >>