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

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.


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

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


Интерфейс и юзабилити » Оформление кода: Почему я выбрал для себя отступ в 2 пробела?

В мире программирования существует достаточно холиварная тема: "Каким должен быть отступ в коде"?   Оставим за бортом споры по теме "Форматироват...


Демо на Ассемблере » Atomix

Размер: 2909 байт Требования: DOS 6.22, AdLib Sound Год: 1998   Интро для главной FIDO ноды Волгодонска N5062/1, долгое время я работал с ф...


Платформа 1C:Предприятие » Как в 1С v.8.2 получить XML-код для DOM-элемента

При написании процедур вызгрузки и загрузки XML данных часто требуется конвертирование частей DOM-дерева в XML код. Части DOM-дерева обычно представле...

RSS подписка

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


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

Внимание!


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

 

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

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

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

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