除非点击Reload Captcha
按钮,否则我的Captcha不会更改,始终显示相同的字词。为什么testLimit
无法正常工作?
Controller.php这样
public $attempts = 5; // allowed 5 attempts
public $counter;
public function actions()
{
return array(
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xf5f5f5,
'testLimit'=>1,
);
}
private function captchaRequired()
{
return Yii::app()->session->itemAt('captchaRequired') >= $this->attempts;
}
public function actionLogin()
{
if (!Yii::app()->user->isGuest) $this->redirect(array('users/update'));
$model = $this->captchaRequired()? new LoginForm('captchaRequired') : new LoginForm;
// collect user input data
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login()) {
$this->redirect(array('users/update'));
} else {
$this->counter = Yii::app()->session->itemAt('captchaRequired') + 1;
Yii::app()->session->add('captchaRequired',$this->counter);
}
}
// display the login form
$this->render('login',array('model'=>$model));
}
View.php
<?php if($model->scenario == 'captchaRequired'): ?>
<br>
<legend><?php echo CHtml::activeLabelEx($model,'verifyCode'); ?></legend>
<div class="control-group">
<div class="controls">
<?php $this->widget('CCaptcha'); ?>
<?php echo CHtml::activeTextField($model,'verifyCode'); ?>
</div>
</div>
<?php endif; ?>
答案 0 :(得分:2)
testLimit
是验证码提交的数量,用户可以在生成的散列更改之前尝试。用于避免拼写错误。
验证会话中的代码存储(http://www.yiiframework.com/doc/api/1.1/CCaptchaAction#getVerifyCode-detail),因此默认代码只能通过以下两种方式之一进行更改:使用错误代码提交testLimit
次表单,或者由用户手动更新。
所以你可以扩展CCaptchaAction类来实现你想要的东西,例如。强制将$regenerate
变量设置为true。
答案 1 :(得分:0)
是简单的解决方案,请使用JScript。这个脚本将重新加载图片captha。
$(document).ready(function () {
setTimeout(function () {
$("img#reviews-verifycode-image").click();
}, 100);
});