CakePHP : Manual/CommonTasks/DataValidation/CustomRules

Пользовательские правила валидации


Если среди встроенных правил вы не нашли то, что вам нужно, то вы можете создать ваше собственное правило валидации. Сделать это вы можете двумя способами: определением собственного регулярного выражения или созданием собственного метода валидации.

Собственное регулярное выражение для валидации


В примере ниже проверяется, чтобы поле 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), или на уровне модели.


<< Встроенные правила валидации | Валидация данных из контроллера >>