CakePHP: Manual/CommonTasks/DataValidation/OneRulePerField

Одно правило для каждого поля

Этот способ определения позволяет лучше контролировать работу правил валидации. Но перед тем, как мы обсудим это, давайте посмотрим на образец добавления правила для отдельного поля:

<?

var $validate = array(

    'fieldName1' => array(

        'rule' => 'ruleName'// или: array('ruleName', 'param1', 'param2' ...)

        'required' => true,

        'allowEmpty' => false,

        'on' => 'create'// или: 'update'

        'message' => 'Ваше сообщение об ошибке'

    )

);

?>

Индекс 'rule' обязателен. Если вы установите только 'required' => true, то валидация 

не будет корректно функционировать. Это потому, что 'required' не является правилом.

Как вы видите, каждое поле (в данном случае показано только одно поле) ассоциируется с массивом, который содержит пять индексов: 'rule', 'required', 'allowEmpty', 'on' и 'message'. Давайте ближе познакомимся с этими индексами.


rule

Индекс 'rule' определяет метод валидации и принимает или отдельное значение, или массив. Значением 'rule' может быть имя метода модели, метода встроенного класса Validation, или регулярное выражение. Полный перечень всех встроенных правил смотрите в главе «Встроенные правила валидации».

Если правило не требует параметров, то 'rule' может содержать просто одно значение, например:

<?

var $validate = array(

    'login' => array(

        'rule' => 'alphaNumeric'

    )

);

?>

Если правило требует некоторые параметры (подобные max, min или range), то 'rule' должно быть массивом:

<?

var $validate = array(

    'password' => array(

        'rule' => array('minLength'8)

    )

);

?>

Помните, что индекс 'rule' требуется для определения правил на основе массивов.


required

Этому индексу должно быть присвоено значение типа boolean. Если 'required' => true, то поле должно быть представлено в массиве данных. Например, если правило валидации определено таким образом:

<?

var $validate = array(

    'login' => array(

        'rule' => 'alphaNumeric',

        'required' => true

    )

);

?>

Тогда данные, посланные методу save() должны содержать данные для поля 'login'. Если это не так, то валидация не будет пройдена. Значение по умолчанию для этого индекса – false.

Если индекс 'login' представлен, но сопутствующее значение пустое, 

то валидация пройдет успешно. 'required' => true контролирует только наличие индекса поля.


allowEmpty

Индексу allowEmpty должно быть присвоено значения типа boolean. Если true, то правило валидации будет пропущено, когда значение пустое.

Значение по умолчанию – false, таким образом, правило будет выполняться (это не значит, что валидация не будет пройдена для пустого значения; если определено правило принимать пустые значения, как правильные, то ошибка проверки данных не будет генерироваться).


on

Индексу 'on' может быть присвоено одно из следующих значений: 'update' или 'create'. Это предоставляет механизм, который позволяет применять определенное правило или во время создания новой записи, или во время обновления.

Если правило определено с 'on' => 'create', то оно будет применено во время создания новой записи. Подобным образом, если определено 'on' => 'update', то правило будет выполняться во время обновления записи.

Значения по умолчанию для 'on' – null. Т.е. правило будет действовать в обоих случаях: во время создания записи и во время обновления.


message

Индекс 'message' позволяет вам определить собственное сообщение об ошибке валидации для правила:

<?

var $validate = array(

    'password' => array(

        'rule' => array('minLength'8),

        'message' => 'Длина пароля должна быть не менее 8 символов'

    )

);

?>

<< Простые правила | Множество правил для поля >>