timur-flush/phalcon-captcha

Phalcon 框架的验证码扩展。

1.0.3 2018-03-26 12:19 UTC

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 地址访问验证码图片。

然后,在依赖容器中创建一个名为 captchashared 服务,它应该返回 ImageRecaptcha 适配器,否则将引发错误。

$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 许可证