
В этой статье рассмотрим как поставить модуль каптчи на кохана фреймворк. Для начала нам понадобится модуль Captcha, его можно скачать с Github, но для Kohana 3.3 его нужно немного доработать.
Подготовка
Сначала скачиваем модуль и распаковываем в папку modules/captcha. Далее нужно в файле modules/captcha/classes/captcha.php заменить старый вариант вызова request:
Request::instance()->headers['Content-Type'] = 'image/'.$this->image_type; Request::instance()->headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; Request::instance()->headers['Pragma'] = 'no-cache'; Request::instance()->headers['Connection'] = 'close';
на новый:
Request::current()->headers('Content-Type', 'image/'.$this->image_type);
Request::current()->headers('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
Request::current()->headers('Pragma', 'no-cache');
Request::current()->headers('Connection', 'close');
Подключаем модуль в bootstrap.php:
Kohana::modules(array( // 'auth' => MODPATH.'auth', // Basic authentication // 'cache' => MODPATH.'cache', // Caching with multiple backends // 'codebench' => MODPATH.'codebench', // Benchmarking tool 'database' => MODPATH.'database', // Database access 'image' => MODPATH.'image', // Image manipulation 'captcha' => MODPATH.'captcha', // Captcha // 'minion' => MODPATH.'minion', // CLI Tasks // 'orm' => MODPATH.'orm', // Object Relationship Mapping // 'unittest' => MODPATH.'unittest', // Unit testing // 'userguide' => MODPATH.'userguide', // User guide and API documentation ));
Controller
Создадим контролер Home.php в котором будем генерировать каптчу и проверять ее на валидность:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Home extends Controller_Template {
public $template = "main";
public function action_index()
{
if($post = $this->request->post()){
/** Проверяем Каптчу на валидацию */
if(Captcha::valid($post['captcha'])){
// записываем данные в БД, например
}
}
$captcha_image = Captcha::instance()->render();
// выводим наш шаблон
$this->template->content = View::factory('home')->bind('captcha_image', $captcha_image);
}
}
Views
Далее создаем шаблон home.php с некой формой и каптчей:
<?=Form::open()?>
<div class="form-item">
<label>Введите имя:</label>
<?=Form::input('name')?>
</div>
<div class="form-item">
<label>Введите код указанный на картинке:</label>
<?=Form::input('captcha')?>
<?=$captcha_image?>
<img alt="Обновить код" src="/images/refresh.png" class="refresh" title="Обновить код" />
</div>
<div class="form-item">
<?=Form::submit('submit', 'Отправить',array('class'=>'btn btn-primary'))?>
</div>
<?=Form::close()?>
jQuery
Для организации смены плохо читаемой картинки на более читаемую, воспользуемся вспомогательным элементом, который будет обновлять изображение посредством jQuery:
$(".refresh").on('click',function(){ // Добавляем событие на изображение "обновить" при нажатии
/** Картинке с кодом присваиваем новое изображение
* Math.random() нам нужно для того чтобы не было кеширование картинок
*/
$("img.captcha").attr("src","/captcha/default?_rnd="+Math.random());
return false;
});
На этом все, будут вопросы - пишите.
Frameworks.su Шпаргалка вебмастера