timur-flush/phalcon-captcha
Phalcon 框架的验证码扩展。
1.0.3
2018-03-26 12:19 UTC
Requires
- php: ^7.2.0
- ext-gd: *
- ext-phalcon: ^3.3.0
This package is auto-updated.
Last update: 2024-09-15 01:45:42 UTC
README
Phalcon-Captcha 是一个方便的库,用于在您的网站上实现验证码。该库支持传统的图像验证码以及 Google ReCaptcha 2。
使用方法
安装 Composer 后,在您的路由器中添加以下代码
$router = new \Phalcon\Mvc\Router(false);
$router->mount(new \TimurFlush\PhalconCaptcha\Routes\Captcha());
现在,您可以通过 http://your_site.com/captcha 地址访问验证码图片。
然后,在依赖容器中创建一个名为 captcha 的 shared 服务,它应该返回 Image 或 Recaptcha 适配器,否则将引发错误。
$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;
});
在容器中注册适配器后,在您的表单中添加以下元素
<?php
class Form extends \Phalcon\Forms\Form
{
public function initialize()
{
$captcha = new \TimurFlush\PhalconCaptcha\CaptchaElement('captcha');
$captcha->addValidator(
new \TimurFlush\PhalconCaptcha\CaptchaValidator(
'message' => 'Неверная капча.',
//cancelOnFail прописан уже за вас.
)
);
}
}
在控制器中,验证应通过表单的 isValid() 方法进行标准检查
<?php
class UserController extends \Phalcon\Mvc\Controller
{
public function loginAction()
{
$form = new Form();
if ($this->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');
}
}
然后在模板中定义显示逻辑。
<?php if ( $this->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' => 'Введите цифры с картинки
']); ?>
<?php elseif ( $this->captcha->getAdapterName() === 'Recaptcha' ): ?>
<!-- отобразит тёмный Recaptcha Widget -->
<?php echo $this->form->render('captcha', [
'theme' => 'dark'
']); ?>
<?php endif; ?>
要求
Phalcon ^3.3.0
PHP ^7.2.0
cURL, mbstring
作者
Timur Flush
Telegram: @flush02
许可证
Apache 2.0 许可证