Обновление картинки captcha при обновлении страницы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Обновление картинки captcha при обновлении страницы

Сообщение long399 »

Добрый день, помогите решить одну проблему.
Использую стандартные для yii2 виджет(\yii\captcha\Captcha) и action(\yii\captcha\CaptchaAction) для работы с капчей на форме.
После перезагрузки страницы текст капчи остается прежним. Нашел на форумах совет отнаследовать actionCaptcha и переопределить в нем метод run:

Код: Выделить всё

<?php

namespace common\components\actions;

use Yii;
use yii\web\Response;

class CaptchaAction extends \yii\captcha\CaptchaAction {
    public $autoRegenerate = true;
    
    public function run()
    {
        if ($this->autoRegenerate && Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) === null) {
            $this->setHttpHeaders();
            Yii::$app->response->format = Response::FORMAT_RAW;
            return $this->renderImage($this->getVerifyCode(true));
        }
        return parent::run();
    }
}
Этот вариант действительно помогает, картинка капчи обновляется, но перестает проходить ее валидация. Помогите довести до ума, чтобы валидация капчи работала.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Обновление картинки captcha при обновлении страницы

Сообщение ElisDN »

long399 писал(а): 2021.07.08, 09:44 Добрый день, помогите решить одну проблему. После перезагрузки страницы текст капчи остается прежним.
А это разве проблема?
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Обновление картинки captcha при обновлении страницы

Сообщение long399 »

ElisDN писал(а): 2021.07.08, 10:13
long399 писал(а): 2021.07.08, 09:44 Добрый день, помогите решить одну проблему. После перезагрузки страницы текст капчи остается прежним.
А это разве проблема?
Не проблема, но все же хотелось бы после обновления страницы видеть новый текст капчи. А добавлять в представление скрипт и вешать событие на window.onload не очень хочется :(
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Обновление картинки captcha при обновлении страницы

Сообщение long399 »

rak писал(а): 2021.07.08, 11:32 а если testLimit поставить 1?
https://www.yiiframework.com/doc/api/2. ... mit-detail
пробовал уже - не помогло :(
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Обновление картинки captcha при обновлении страницы

Сообщение rak »

long399 писал(а): 2021.07.08, 11:50
rak писал(а): 2021.07.08, 11:32 а если testLimit поставить 1?
https://www.yiiframework.com/doc/api/2. ... mit-detail
пробовал уже - не помогло :(
так а что именно не помогло?
имеется в виду взять стандартный(т.е. не переопределять) экшен и виджет капчи и поставить testLimit
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Обновление картинки captcha при обновлении страницы

Сообщение long399 »

rak писал(а): 2021.07.08, 12:26 так а что именно не помогло?
имеется в виду взять стандартный(т.е. не переопределять) экшен и виджет капчи и поставить testLimit
да, именно так и делал. Я action стандартный пробую ставить и ему задаю свойство testLimit => 1. Картинка не обновляется.

контроллер

Код: Выделить всё

public function actions()
{
    return [
        'captcha' => [
            //'class' => CaptchaAction::class, // action-наследник
            'class' => '\yii\captcha\CaptchaAction',

            'testLimit' => 1,
            'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            'minLength' => 3,
            'maxLength' => 4,
            'offset' => -1,
            'fontFile' => '@webroot/fonts/captcha/a_braggatitulgr.ttf'
        ],
    ];
}
модель

Код: Выделить всё

public function rules()
{
    return [
        ...
        ['captcha', 'captcha', 'captchaAction' => '/sveden/reviews/captcha']
    ];
}
вьюха

Код: Выделить всё

<?= $form->field($model, 'captcha')->widget(Captcha::class, [
     'captchaAction' => '/sveden/reviews/captcha',
     'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
]) ?>
Ответить