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), или на уровне модели.

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