Модуль Captcha

Комментарии: 42  Просмотры: 16 500

С модулем Captcha для версии Kohana 3.2 сейчас вообще интересная ситуация. Тот, что выложен под названием Kohana 3.x совершенно не работает на 3.2, возникает ошибка обращения к конфигурации в файле captcha.php, причем в трех местах. Вы можете исправить ее самостоятельно (обращение к конфигу для версии 3.2 описано Здесь), можете посмотреть как это сделано на GitHub, а можете скачать архив, где все это мной уже исправлено, только бери и пользуйся. Вот Отсюда. Как обычно распакуйте его в папку modules. Не забудьте скопировать конфиг из modules/captcha/config в /application/config/, так как его правки лучше производить в папке приложения, а не модулей.
Далее как обычно добавляем наш модуль в массив модулей в файле bootstrap.php:

'captcha'  => MODPATH.'captcha', //Captcha

Теперь в Контроллере для страниц, использующих капчу, пишем:

$captcha = Captcha::instance();

Далее нужно передать капчу в блок контента:

$content->captcha = $captcha;

или

$content->captcha = $captcha->render();

Работает оба варианта.
Ну и естественно в файле Вида добавляем:

<?php echo $captcha; ?>

Все. Осталось только организовать проверку правильности ввода капчи юзером. Я создал в Виде проверочную форму:

<form method="post">
    <input name="captcha" type="text" />
    <input name="ok" type="submit" value="Отправить" />
</form>

И добавил проверку в контроллер:

$content->message = '';
if($_POST)
    $content->message = Captcha::valid($_POST['captcha'])? 'Прахади дарагой' : 'Не угадал';

Получились как будто комментарии благодарных (и не очень) читателей с капчей. Посмотреть как это выглядит можно Здесь.
В конфигурационном файле имеются довольно гибкие настройки капчи. Можно менять размеры картинки, шрифт и даже саму капчу (параметр style). Ну и тут есть некоторые проблемы. Например, math у меня толком не заработал, все время выдавал неверный ответ, хотя складываю «3+2″ я вроде правильно. А riddle и word, указанные в качестве параметра для instance, увы, выдают ошибку Коханы. Если вы знаете решение проблемы — напишите об этом пожалуйста в комментариях.

Обсудить на форуме


К записи оставлено 42 коммент.

Надо исправить:

В captcha\classes\captcha\riddle.php

$riddles = Kohana::config(‘captcha.riddles’); на
$riddles = Kohana::$config->load(‘captcha.riddles’);

а также в captcha\classes\captcha\word.php

$words = Kohana::config(‘captcha.words’); на
$words = Kohana::$config->load(‘captcha.words’);

Не пашет. Он ругается на получение названия класса в строке
$class = ‘Captcha_’.ucfirst($config['style']);
так как у Riddle и Words вообще нет такого ключа. Если это поправить и прописать при создании капчи
$captcha = Captcha::instance(‘riddles’);
тогда текст выводит, но не принимает капчу, все время пишет, что неверно.

А вот words работает. Вообщем не работает только Riddle и Math…показывает, но капчу не принимает. Надо проверять.

они не работают по такому методу как остальные варианты, так как в их методах render нет реализации рисования картинок. можно вызвать так echo Captcha::instance()->render(); кога указан тип Riddle и Math, возможно так и было задумано.

Да уж… что-то kohana от релиза к релизу все страньше и страньше….

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

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

тут все дело в уровне знания php5 и kohana
Я, например, пока еще не смогу сам написать рабочий модуль типа капча…

Ну а чем вам тогда кохана не угодила так ? Имхо очень удачный образец того, как надо строить свое приложение. И это на фоне унылого говнокода, какому например учат тут http://codegust.com/?p=16
Или вам не угодил именно модуль ?
Я писал свой рабочий модуль, только пагинатора (точнее у меня был свой класс и я его интегрировал в Кохану), но потом все равно перешел на тот, который рассматривается здесь. Он лучше моего. Более гибкий.

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

странно, а что ж тогда здесь
http://kohanaframework.su/kohana/articles/article1
работает ?

Мде, и где здесь ВАШ код, сэр?..

Мы уже на ВЫ. Прогресс, однако, налицо.
Мой код там везде в папке application, где я собственно и подключаю (как здесь рассказано) капчу из представленного здесь же архива.
И если у вас она не работает, может стоит пенять на кривые руки, нежели на «непригодный» модуль. Он конечно багнутый, но режим с картинками там 100% рабочий.

Меня интересовал лишь код написанный лично вами. Вопрос исчерпан [зевок].

Я нигде и не писал, что это мой модуль, скорее наоборот (если не спать, а внимательно прочитать первый параграф этого урока). Я просто рассказываю, как с ним работать.

Денис помогите решить проблему сделал как у Вас , но как проверить на правильность заполнения капчи

Вид :

:
’30′))?>

:
’30′))?>

:

:
’30′))?>

и в контролере :
if (isset($_POST['send']) and Captcha::valid($_POST['captcha']) )
{

//var_dump($_POST['captcha']);

$config = Kohana::$config->load(‘email’);
Email::connect($config);

$to = ‘kohanablog@gmail.com’;
$subject = ‘Сообщение от Коханой..т.е. Коханы.’;
$from = $_POST['email_user'];

$message = ‘пользователь, представившийся ‘.$_POST['name_user'].’ ‘; $message .= ‘написал сообщение:’.$_POST['message_user'].’ ‘.’Email для ответа: ‘.$_POST['email_user'].».’Вернутся на сайт‘;

Email::send($to, $from, $subject, $message, $html = true);

как тут правильно проверить капчу ?я новичок

Код от Вида срезало. Лучше на форум. Условие не срабатывает ?

да не срабатывает , ща выложу на форум

https://github.com/ener/kohana-captcha-3.2.x — я поправил мужики, если надо под 3.2 — писал для себя, если будут баги на 3.2 — пишите

Установил этот модуль по последней ссылке с github, да и тот что с самого начала дается, в итоге получаю ошибку что там что там:

ErrorException [ Notice ]: Array to string conversion
SYSPATH\classes\kohana\arr.php [ 437 ]
432 }
433 else
434 {
435
436 // Find the values that are not already present
437 $diff = array_diff($val, $result[$key]);
438
439 // Indexed arrays are merged to prevent duplicates
440 $result[$key] = array_merge($result[$key], $diff);
441 }
442 }

Вот тут даже есть некоторые солвы http://forum.kohanaframework.org/discussion/9426/solved-ko-3-2-kohana-captcha-module-issues/p1, которые я уже от безвыходности поделал, все равно эта ошибка и хоть тресни не хочет капча работать. PHP Version 5.4.3 / Apache 2.2.22 (Win 32).

Решено. Я там отписался на github в issue.

Что решено конкретно ?
У меня так и не работают math и riddle. А все остальное и в модуле, который выложен в уроке, работало.

$content->message = Captcha::valid($_POST['captcha']) ? 'Прахади дарагой' : 'Не угадал';

Как проверить $content->message на пустоту?

empty($content->message) не проходит!

А если
$content->message = Captcha::valid($_POST['captcha']) ? ‘Прахади дарагой’ : »
if(empty($content->message))



Оставить комментарий или два

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