Собираем
информацию
по крупицам

Web - разработка

Kohana 3.x : Валидация данных
08-10-2011
02:49:47

Введение

 

Валидация в Kohana 3.x осуществляется с помощью класса-валидатора, который обрабатывает ассоциативные массивы ключ=>значение. Например, через валидатор можно проверить следущий массив:

 

$a=array{ 'name' => 'Vasya',
          'age' => 25,
          'city' => 'Urupinsk' };

 

В терминах валидатора, ключ - это поле. Соответствующее ключу значение - это значение поля.

Через валидатор невозможно проверить одну отдельную переменную. Чтобы проверить содержимое одной переменной, придется сделать временный массив с полем, содержащим значение переменной.

В валидаторе для каждого поля задаются правила, по которым эти поля надо проверять. В качестве названия поля можно использовать значение TRUE, тогда правило будет проверять все поля.

После задания правил, дается команда проверки, которая проверит поля, и в случае если все проверки прошли нормально, возвратит истину, иначе ложь.

При валидации, для повышения безопасности, удаляются все поля, которые не подвергались валидации. Считается, что поле было провалидировано, если ему был присвоен ярлык, применён фильтр, правило или функция обратного вызова. Это предотвращает доступ к полям, которые небыли подвергнуты валидации.

 

 

Создание валидатора

 

Объект-валидатор можно создать используя метод Validation::factory. В качестве параметра передается проверяемый массив:

 

$postValidator = Validation::factory($_POST);

 

В данном примере $_POST -это массив данных, переданных через механизм POST. Далее в примерах будет показано, как валидировать данные, передаваемые при регистрации нового пользователя в какой-то абстрактной веб-системе.

 

 

Указание ярлыков

 

Ярлык (label) - это удобочитаемая интерпретация имени поля. Назначить полю ярлык можно с помощью метода label():

 

$postValidator->label('name', 'имя пользователя');

 

Установка ярлыка - это просто установка псевдонима имени поля. Например, для поля name можно установить заголовок «имя пользователя». Этот заголовок потом может использоваться в сообщениях об ошибке (например, «Вы не указали имя пользователя»).

 

 

Добавление правил

 

При создании проверочных правил необходимо задать имя проверяемого поля, метод проверки (или call-back функцию, которая осуществляет проверку), и массив параметров:

 

$postValidator->rule(<имя_поля>, 
                     <проверяющий_метод>, 
                     array(<параметр1>, <параметр2>, ...));

 

Если параметры не указывать, значение поля будет напрямую передано в проверяющий метод.

В качестве параметра можно использовать макроподстановку ':value', которая равна значению поля. Например, два следующих правила эквивалентны:

 

$postValidator->rule('name', 'not_empty');
$postValidator->rule('name', 'not_empty', array(':value'));

 

Проверочный метод можно задавать разными способами. Следующие три правила эквивалентны:

 

$postValidator->rule('number', 'phone');
$postValidator->rule('number', array('Valid', 'phone'));
$postValidator->rule('number', 'Valid::phone');

 

 

Фильтрация

 

Если параметры не указывать, значение поля будет напрямую передано в проверяющий метод.

 

Класс Validate предоставляет возможность задать функцию, которая будет предварительно обрабатывать значение поля. Эта функция-фильтр видоизменяет значение поля. Фильтр срабатывает перед применением проверочных правил.

Установка функции-фильтра производится с помощью метода filter().

Например, если нужно во всех полях убрать начальные и конечные пробелы, можно воспользоваться следующим кодом:

 

// Применяем фильтр на все поля
$validate->filter(TRUE, 'trim');

 

Первый параметр TRUE говорит о том, что нужно обрабатывать не отдельное поле, а все поля. Второй параметр 'trim' задает метод обработки - в данном случае это будет PHP-функция trim().

 

 

Запуск на проверку

 

Проверка выполняется с помощью метода check():

 

$postValidator->check()

 

Этот метод нужно запускать после прописывания правил, фильтров и ярлыков. Данный метод вернет FALSE, если были найдены какие-то ошибки, и TRUE, если ошибок небыло.

 

 

Стандартные проверки

 

Валидатор в Kohana проверяет значения массива с помощью правил, доступных в классе Valid.

 

Valid::not_empty

Значение должно быть непустым

Valid::regex

Значение должно удовлетворять регулярному выражению

Valid::min_length

Минимально допустимое количество символов в значения

Valid::max_length

Максимально допустимое количество символов в значения

Valid::exact_length

Значение должно содержать указанное количество символов

Valid::email

Значение должно содержать email-адрес

Valid::email_domain

Проверка наличия домена, указанного в строке с email адресом

Valid::url

Значение должно содержать правильно оформленный URL

Valid::ip

Значение должно содержать допустимый IP - адрес

Valid::phone

Значение должно содержать телефонный номер

Valid::credit_card

Значение должно содержать номер кредитной карточки

Valid::date

Значение должно содержать дату (и время)

Valid::alpha

Значение может содержать только символы букв

Valid::alpha_dash

Значение может содержать только символы букв и тире

Valid::alpha_numeric

Значение может содержать только буквы и цифры

Valid::digit

Значение может содержать только целое число

Valid::decimal

Значение должно быть десятичным числом или значением с плавающей точкой

Valid::numeric

Значение может содержать только символы цифр

Valid::range

Значение должно находиться в пределах указанного диапазона

Valid::color

Значение должно содержать цвет в HEX представлении

Valid::matches

Значение сравнивается со значением другого поля



Пример

 

Сделаем валидацию данных, находящихся в массиве $_POST, который содержит информацию, вводимую пользователем при регистрации в какой-то веб-службе. Вначале нужно создать объект-валидатор, передав ему в качестве параметра проверяемый массив $_POST:

 

$validator = Validation::factory($_POST);

 

Затем зададим такие правила:

 

$validator->rule('username', 'not_empty');
$validator->rule('username', 'regex', array(':value', '/^[a-z_.]++$/iD'));
$validator->rule('password', 'not_empty');
$validator->rule('password', 'min_length', array(':value', '6'));
$validator->rule('confirm', 'matches', array(':validation', 'confirm', 'password'));
$validator->rule('use_ssl', 'not_empty');

 

В качестве проверочного метода можно использовать не только проверки, поддерживаемые классом Valid, но и любую существующую PHP-функцию. Например, можно добавить такое правило:

 

$validator->rule('use_ssl', 'in_array', array(':value', array('yes', 'no')));

 

Указав в качестве проверочного метода 'in_array', мы просто используем PHP-функцию in_array() для проверки значения. В качестве первого параметра функции in_array() мы передаем значение поля 'use_ssl', используя макроподстановку ':value'. В качестве второго параметра передаем массив допустимых значений, как того требует функция in_array().

В качестве проверочного метода можно использовать любую написанную нами функцию, главное чтобы она была в области видимости. Прощще всего это сделать, описав функцию в глобальном пространстве.

В качестве проверочного метода можно использовать метод любого класса. Вот как это делается:

 

$validator->rule('username', 'User_Model::unique_username');

 

Здесь User_Model - это имя класса (необязательно должен быть класс модели, класс может быть любым, хотя обычно это все-таки модель). unique_username - это имя метода класса User_Model. Данный метод может быть описан примерно так:

 

public static function unique_username($username)
{
  // Проверка, существет ли уже в базе данных

  // указанное имnbsp;

  return ! DB::select(array(DB::expr('COUNT(username)'), 'total'))

                     ->from('users')

                     ->where('username', '=', $username)

                     ->execute()

                     ->get('total');
}


На этом всё.

PS:

Официальное описание класса Validation можно найти на сайте Kohana здесь: http://kohanaframework.org/3.2/guide/kohana/security/validation.


К списку "Компьютерное"

Интересное на сайте


Скейтборд » Настоящая история скейтбординга. Часть 5: Чем отличается слаломная доска от лонгборда

Итак, как уже поняли читатели, в мире есть не только всем привычные "падонковские" скейты. Есть доски, предназначенные для совершенно другого стиля ка...


Демо, сделанное в генераторе » Xintrea Home Page Demo

Размер: 250 Кбайт Требования: Windows 95/98/XP Год: 2005   Демка для моего старого сайта xi.net.ru. Демка сделана просто щелчками мышки, с ...


Классическая анимация » Прыгающая подушка

Оборудование: Pentium-IV, Wacom Graphire3 CTE-630 Среда: Flash 8 Год: 2005   Первая и, видимо, последняя попытка нарисовать мини-мультфильм по т...

RSS подписка

Подпишитесь на новости сайта по RSS


О, смотри-ка какое хорошее место. Дайте два!

Внимание!

На этом сайте разрабатывается программа MyTetra и её родственные проекты.

Доступны к просмотру следующие базы знаний:

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик