Yii2多个验证码在一个页面中

时间:2016-04-13 10:40:54

标签: yii2 captcha

我有一个页面,其中包含分离表单中的多个验证码,例如登录和注册模式等。 如果我使用下面的代码问题是当刷新一个验证码时,另一个验证码将无法使用,因为它们使用相同的会话变量:

1)登录

登录模式(查看):

List<Product> products=new ArrayList<>();
Collections.sort(products);

LoginModel:

Figaro gem

2)注册

注册模式(视图):

application.yml

RegisterModel:

secrets.yml

解决会话问题我使用不同的验证码操作来设置不同的会话变量:

1)登录

登录模式视图:

gitignore

LoginModel:

echo Captcha::widget([
    'id' => 'Login-captcha',
    'name' => 'LoginModel[captcha]',
    'captchaAction' => '/site/captcha'
]);

2)注册

注册模式(视图):

public function rules()
{
    return [              
        ['captcha', 'captcha'],
    ];
}

RegisterModel:

echo Captcha::widget([
    'id' => 'register-captcha',
    'name' => 'RegisterModel[captcha]',
    'captchaAction' => '/site/captcha'
]);

直到现在一切正常,但是当我将常规php文件中的会话通过主配置文件的commponent部分中的下面的配置移动到数据库时:

public function rules()
{
    return [              
        ['captcha', 'captcha'],
    ];
}

然后第一页中的验证码加载不起作用,必须刷新它们才能正常工作。 有什么问题?

1 个答案:

答案 0 :(得分:0)

试试这个,它适用于yii1,但你可以得到这个想法,更多detail

public function rules()
{
    return array(
        ...
        array('verifyCode1', 'captcha', ...
        array('verifyCode2', 'verifycaptcha2', ...
    );
}

public function verifycaptcha2($attribute, $params)
{
        $captcha2 = Yii::app()->getController()->createAction('captcha2nd');
        if (!$captcha2->validate($this->verifyCode2, false))
        {
                $this->addError('verifyCode2', 'invalid captcha.');
        }
}

另见this