Wallogit.com
2017 © Pedro Peláez
The captcha extension of the Phalcon framework.
Phalcon-Captcha представляет собой удобную библиотеку для реализации капчи на Вашем сайте. Библиотека поддерживает как привычные изображения, так и Google Recaptcha 2., (*1)
После установки через Composer, пропишите в Вашем роутере следующее:, (*2)
$router = new \Phalcon\Mvc\Router(false); $router->mount(new \TimurFlush\PhalconCaptcha\Routes\Captcha());
Теперь, по адресу http://your_site.com/captcha, будет находиться картинка с капчой., (*3)
Затем, создайте в контейнере зависимостей shared сервис с названием captcha, который должен будет возвращать Image либо Recaptcha адаптер, в противном случае будет вызвана ошибка., (*4)
$di->setShared('captcha', function(){
/*
//Создаём Recaptcha адаптер
$adapter = new \TimurFlush\PhalconCaptcha\Adapter\Recaptcha([
'publicKey' => 'your/public/key',
'privateKey => 'your/private/key',
]);
return $adapter;
*/
//Создаём Image адаптер
$adapter = new \TimurFlush\PhalconCaptcha\Adapter\Image();
//ниже настройки по-умолчанию
/* Установить длину картинки. (опционально) */
$adapter->setWidth(150);
/* Установить высоту картинки. (опционально) */
$adapter->setHeight(40);
/* Установить длину капчи 4 символа. (опционально) */
$adapter->setLength(4);
/* Установить размер шрифта 15 символов. (опционально) */
$adapter->setFontSize(15);
/* Установить RGBA цвет для шрифта. (опционально) */
$adapter->setFontColor(0, 0, 0, 127);
/* Установить RGBA цвет для фона. (опционально) */
$adapter->setBackgroundColor(0, 0, 0, 127);
/* Разрешить цифры в картинке. (опционально) */
$adapter->setAllowNumbers(true);
/* Запретить буквы в картинке. (опционально) */
$adapter->setAllowLetters(false);
/* Запрещаем рандомный наклон букв. (опционально) */
$adapter->setRandomAngle(false);
return $adapter;
});
После регистрации адаптера в контейнере, добавьте в свою форму следующий элемент:, (*5)
addValidator(
new \TimurFlush\PhalconCaptcha\CaptchaValidator(
'message' => 'Неверная капча.',
//cancelOnFail прописан уже за вас.
)
);
}
}
```
В контроллере проверка должна идти по-стандарту через метод формы isValid()
```
request->isPost()){
do{
if (!$form->isValid($this->request->getPost()){
foreach($form->getMessages() as $messages)
echo $message->getMessage(); //вывод ошибок из формы если они есть
break;
}
}while(false);
}
$this->view->form = $form;
echo $this->view->render('login.html');
}
}
```
И уже в шаблоне, Вы определяете логику отображения.
```
captcha->getAdapterName() === 'Image' ): ?>
<!-- Вывод изображения с кастомизацией -->
<?php echo $this->captcha->getImage([
'width' => 180, //ширина изображения в пикселях (опционально)
'height' => 50, //высота изображения в пикселях (опционально)
'font_size' => 15, //размер шрифта (опционально)
'font' => [ //настройка цвета шрифта (опционально)
'R' => 0, //красный (обязательно)
'G' => 0, //зеленый (обязательно)
'B' => 0, //синий (обязательно)
'A' => 0 //альфа канал (опционально)
],
'bg' => [ //настройка цвета фона (опционально)
'R' => 0, //красный (обязательно)
'G' => 0, //зеленый (обязательно)
'B' => 0, //синий (обязательно)
'A' => 0 //альфа канал (опционально)
]
]); ?>
<!-- обычный вывод изображения -->
<?php echo $this->captcha->getImage(); ?>
<br>
<!-- вывод текстового поля -->
<?php echo $this->form->render('captcha', [
'placeholder' => 'Введите цифры с картинки
']); ?>
captcha->getAdapterName() === 'Recaptcha' ): ?>
<!-- отобразит тёмный Recaptcha Widget -->
<?php echo $this->form->render('captcha', [
'theme' => 'dark'
']); ?>
Phalcon ^3.3.0, (*6)
PHP ^7.2.0, (*7)
cURL, mbstring, (*8)
Timur Flush, (*9)
Telegram: @flush02, (*10)
Apache 2.0 License, (*11)