Первой проблемой, с которой я столкнулся при работе с Yii, было отсутствие нормальной капчи.
Капча по умолчанию меня не устроила по ряду причин:
- постоянно глючил (простым нажатием F5, иногда отображалось нормально, иногда отображалась пустая картинка, иногда картинка только с первым символом);
- Сам алгоритм мне показался слишком простым (+используется только один шрифт);
- Код на картинке не обновился при перезагрузке страницы.
И вариант с рекапчей тоже «не вариант» — его невозможно было вписать в нужный мне дизайн (или я просто в нем плохо разбирался).
Потому что в своих проектах я обычно использую капчу «KCAPTCHA» ( http://captcha.ru/kcaptcha/ ), тогда я решил объединить существующую капчу от Yii и «KCAPTCHA».
И вот что я получил - glavweb.ru/public/download/kcaptcha.zip
Использование капчи
Прежде всего скачайте капчу отсюда glavweb.ru/public/download/kcaptcha.zip .
Далее вам необходимо распаковать архив в папку «protected/extensions» вашего приложения Yii. Итак, у вас будет такая структура: protected/
extensions/
kcaptcha/
fonts/
KCaptchaAction.php
Поскольку расширение содержит только Action, а виджет и валидатор капчи стандартные, то как подключить капчу полностью описывать не буду, в рецептах это сделано достаточно хорошо - http://www.yiiframework.ru/doc/cookbook/ru/form.captcha .
Изменения касаются только контроллера, добавьте в него что-то вроде этого: public function actions()
{
return array(
'captcha'=>array(
'class' => 'application.extensions.kcaptcha.KCaptchaAction',
'maxLength' => 6,
'minLength' => 5,
'foreColor' => array(mt_rand(0, 100), mt_rand(0, 100),mt_rand(0, 100)),
'backColor' => array(mt_rand(200, 210), mt_rand(210, 220),mt_rand(220, 230))
)
);
}
Возможные параметры капчи
алфавит — Использован алфавит. По умолчанию — «0123456789abcdefghijklmnopqrstuvwxyz».Не следует изменять без изменения файлов шрифтов.
разрешенные символы — Символы, используемые для рисования капчи, без похожих символов (o => 0, 1 => l, i => j, t => f).
По умолчанию — «23456789abcdeghkmnpqsuvxyz».
ширина — Ширина капчи.
Значение по умолчанию — 120. Не меняйте это значение без необходимости, эти параметры оптимальны.
высота — Высота капчи.
Значение по умолчанию — 60. Не меняйте это значение без необходимости, эти настройки оптимальны.
миндлина — Минимальное количество символов капчи.
По умолчанию — 6. максимальная длина — Максимальное количество символов капчи.
По умолчанию — 7. колебаниеАмплитуда — Вертикальная амплитуда колебаний символа, деленная на 2. По умолчанию — 5. нет пробелов — Запрет пробелов между символами.
По умолчанию истинно.
передний цвет — Цвет текста капчи в формате RGB. Принимает значение либо в виде массива, либо в виде строки, разделенной запятыми.
НазадЦвет — Цвет фона капчи в формате RGB. Принимает значение либо в виде массива, либо в виде строки, разделенной запятыми.
testLimit — Значение того, сколько раз будет отображаться одна и та же капча.
Влияет только на ошибочный ввод капчи (на простое обновление не влияет).
По умолчанию — 3. фиксированныйVerifyCode — Исправлен код проверки.
В основном это используется в автоматических тестах, где мы хотим воспроизводить один и тот же код проверки каждый раз, когда запускаем тесты.
По умолчанию равно нулю.
FontsDir — Абсолютный путь к каталогу со шрифтами.
По умолчанию установлено значение null, что означает, что используются шрифты, поставляемые с расширением.
Обновление кода изображения после перезагрузки страницы
А вот обновить код изображения после перезагрузки страницы оказалось немного сложнее.Загвоздка в валидаторе «CCaptchaValidator», а точнее в его методе, отвечающем за клиентскую часть.
Даже если мы будем обновлять код проверки каждый раз при загрузке капчи, то в js (сгенерированном валидатором) мы все равно получим код с предыдущего изображения.
Это происходит потому, что запрос изображения происходит после загрузки страницы.
Те.
сначала в js-коде получаем сохраненный в сессиях код изображения, затем делается запрос в , сессия обновляется и в результате код с изображения не соответствует соответствующему коду в js (заметьте, естественно, в js это не сам код изображения, а его хеш).
Решение здесь либо переписать валидатор и обновить проверочный в валидаторе при отображении в js ($captcha-> getVerifyCode(true)) либо удалить сессию с кодом в действии, отвечающем за отображение формы с капча: // Refresh captcha
Yii::import('application.extensions.kcaptcha.KCaptchaAction');
Yii::app()->session->remove(KCaptchaAction::SESSION_KEY);
Теги: #Yii #captcha #KCAPTCHA #Yii
-
Как Ориентироваться В Выборе Веб-Хостинга
19 Dec, 24 -
Вам Нужно Использовать Веб-Хостинг Mac?
19 Dec, 24 -
7 Навыков Высокоэффективных Программистов
19 Dec, 24 -
Кривой Биллинг Билайн Дубль 2
19 Dec, 24 -
Какой Видеокодек Лучше Для Html 5
19 Dec, 24