Проверка данных (validation) – это важная часть каждого приложения, т.к. она помогает убедиться, что данные модели согласовываются с бизнес правилами программы. Например, вы можете захотеть убедиться, что пароли имеют длину не менее восьми символов, или убедиться, что имена пользователей уникальны. Определение правил проверки данных упрощает работу с формами.
Существует множество аспектов в процессе контроля данных. В этой главе мы рассмотрим процесс со стороны модели. По существу: что происходит, когда вы вызываете метод save() вашей модели. Дополнительную информацию о том, как управлять выводом ошибок валидации, смотрите в главе о FormHelper.
Первый шаг в проверке данных – это создание правил валидации в модели. Для того, чтобы сделать это, используйте массив Model::validate в определении модели, например:
<?php
class User extends AppModel {
var $name = 'User';
var $validate = array();
}
?>
В примере выше, массив $validate добавлен в модель User, но он не содержит правил валидации. Предположим, что в таблице users есть поля login, password, email, born. В следующем примере показаны несколько простых правил проверки данных, которые применяются к указанным полям:
<?php
class User extends AppModel {
var $name = 'User';
var $validate = array(
'login' => 'alphaNumeric',
'email' => 'email',
'born' => 'date'
);
}
?>
Последний пример показывает, как правила валидации могут быть добавлены для полей модели. Для поля login разрешены только буквы и цифры, email должен быть правильный, и в born будет пропущена только корректная дата. Определение правил валидации дает возможность CakePHP автоматически показывать сообщения с ошибками в формах, если подтвержденные данные не соответствуют определенным правилам.
В CakePHP есть много правил контроля данных и использовать их довольно просто. Некоторые встроенные правила позволяют проверять формат электронных адресов, URL и номеров кредитных карт – но детальнее об этом мы расскажем позже.
А сейчас рассмотрим пример с более сложными правилами валидации, который показывает преимущества некоторых из этих встроенных правил:
<?php
class User extends AppModel {
var $name = 'User';
var $validate = array(
'login' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Только буквы и цифры'
),
'between' => array(
'rule' => array('between', 5, 15),
'message' => 'От 5 до 15 символов'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'Минимум 8 символов'
),
'email' => 'email',
'born' => array(
'rule' => 'date',
'message' => 'Введите корректную дату',
'allowEmpty' => true
)
);
}
?>