При разработке web-приложений, как и при любой другой, становится заметно, что многие операции в коде мы делаем в каждом проекте. Именно для того, чтобы облегчить свой труд в рутинных операциях мы и используем различные библиотеки и фреймворки. Одной из таких рутинных операций является валидация (validation) - проверка данных (обычно вводимых пользователем) на корректность. Мы проверяем, что пользователь ввел корректный email, корректный url или число, а не произвольную строку… Во фреймворке Kohana для этой операции тоже есть готовые средства. Давайте посмотрим как это работает, и как это облегчает нашу с вами работу.

Для того чтобы использовать возможности валидации в Kohanaphp необходимо создать объект класса Validation.

//Собираемся проверять данные пришедшие через post
$post = new Validation($_POST);

Если есть необходимость, то можно добавить предварительную обработку

//Выполним PHP-функцию trim() для значения поля email
$post->pre_filter('trim', 'email');

Далее необходимо добавить для нужных полей правила проверки

//Задание обязательности поля email и проверки на корректный email
$post->add_rules('email', 'required', array('valid','email'));

Когда мы зададим правила для всех полей, то мы попросим фреймворк Kohanaphp выполнить проверку пришедших данных на соотвествие правилам. Это действие остуществляется в момент, когда мы вызываем метод validate().

if($post->validate())
{
   echo 'Вы ввели корректные данные';
}
else
{
   echo 'Некоторые данные содержат ошибки<br />';
   $errors = $post->errors();
   foreach ($errors as $key => $val)
   {
       echo 'Поле: '.$key.' - '.$val.'<br />';
   }
}

При таком коде в случае наличия ошибок вы увидите список их имен (имен ошибок). Если же вам нужны человеческие определения ошибок, то придется их задать, поскольку Kohana не определяет описаний ошибок.
Для того, чтобы их задать, надо в файле application/i18n/ru_RU/form_errors.php для соответсвующего языка задать массив $lang с сообщениями об ошибках.

$lang = array
(
        // Ключ email - это имя поля
	'email' => array
		(
                    'required' => 'E-mail должен быть задан.',
                    'email'    => 'Строка должна иметь вид name@domain.com.',
                    'default'  => 'Неизвестная ошибка.',
		),
);

Тогда, указав имя файла с описанием сообщений мы сможем получить детали в коде

$errors = $validation->errors('form_errors')
//$errors будет содержать массив пар ('field_name' => 'field error message)

Kohanaphp содержит большое количество встроенных правил валидации, которые перечислены и детально описаны на страницах документации Kohana.
Однако часто в проектах возникает потребность определить свои правила. Kohana позволяет делать и это

$post->add_callbacks('email', array($this, '_unique_email'));
public function _unique_email(Validation $array, $field)
{
   // Проверяем email по БД
   $email_exists = 
       (bool) ORM::factory('user')->where('email', $array[$field])->count_all();
 
   if ($email_exists)
   {
       // Добавляем ошибку с именем email_exists
       $array->add_error($field, 'email_exists');
   }
}

Так же просто Kohana позволяет провеярть и загружаемые файлы (их тип и размер). Вот такой вот гибкий инструмент для валидации. Вы все еще варите яйца на голом php?! Тогда мы идем к вам! :) Подпишитесь на RSS-поток, чтобы не пропустить следующую статью о Kohanaphp.

Tags: , ,

Comments are closed.