关于Yii验证码使用时刷新页面不变的情况,网上也有很多的解决方案,但是相对的都比较麻烦而且貌似实现中也有这样或者那样的问题,现在提供一个取巧的方法,就是在页面刷新时给验证码绑定click事件。代码如下:
1 2 3 4 5 6 7 8 9 10
| <script type="text/javascript> //临时应急方案 $(document).ready(function(){ var img = new Image; img.onload=function(){ $('#captcha_img').trigger('click'); } img.src = $('#captcha_img').attr('src'); }); </script>
|
因为Yii自带的验证码组件只提供了字母类的验证,现根据网络提供可以实现数字验证码的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class MyCaptchaAction extends CCaptchaAction { const SESSION_VAR_PREFIX='Ext.MyCaptchaAction.'; public $minLength=4; public $maxLength=4;
protected function generateVerifyCode() { if($this->minLength<3) $this->minLength=3; if($this->maxLength>20) $this->maxLength=20; if($this->minLength>$this->maxLength) $this->maxLength=$this->minLength; $length=rand($this->minLength,$this->maxLength);
$letters='1234567890'; $code=''; for($i=0;$i<$length;++$i) { $code.=$letters[rand(0,10)]; }
return $code; } }
|
放到 protected/extensions
目录
在配置文件 protected/config/main.php
中自动加载 extensions
目录的类
1 2 3 4 5 6 7 8 9 10
| 'import'=>array( 'application.models.*', 'application.components.*', 'application.extensions.*', ),
'captcha'=>array( 'class'=>'application.extensions.MyCaptchaAction', ),
|