Yii2.x 中captcha 验证码使用的一些心得 [ 技术分享 ]
首先对应控制器中定义captcha,对应模型中声明captcha变量。
public function actions() {
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'height' => 50,
'width' => 80,
'minLength' => 4,
'maxLength' => 4
],
];
}
设置一些简单属性,也可以不设。
对应视图中添加表单:
<?= $form->field($user_login,'captcha')->widget(yii\captcha\Captcha::className()
,['captchaAction'=>'user/captcha',
'imageOptions'=>['alt'=>'点击换图','title'=>'点击换图', 'style'=>'cursor:pointer']]);?>
captchaAction
指定captcha所在的控制器路径,默认是‘site/captcha’,不换到指定位置的话,很容易,验证码就显示不出来。
imageOptions
设定一些参数,例如 手势,提示等等。
对应布局中,如下:以确保你在点击验证码可以自动刷新
<?php $this->beginPage() ?>
<?php $this->beginBody() ?>
//your codes...
<?= $contents; ?>
//your codes...
<?php $this->endBody() ?>
<?php $this->endPage() ?>
最后,控制器中调用render而非renderPartial:
return $this->render('login',['user_login'=>$user_login]);
共 9 条回复
-
不是bug,看了源码之后,要求再次请求才会刷新认证码,以下为我写的 js
//刷新验证码 function refreshCaptcha(_captcha){ $.getJSON("/site/captcha?refresh=true",function(res){ var dataUrl = _captcha.attr("data-url"); if(!dataUrl){ dataUrl = _captcha.attr("src"); _captcha.attr("data-url",dataUrl); } _captcha.attr("src",dataUrl+"?rd="+Math.random()); }); }
ghost50 觉得很赞 -
最好是自己继承一下,再修改
namespace app\actions; // 改成自己的名称空间 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(); } }
amrozhou
注册时间:2015-02-25
最后登录:2021-06-03
在线时长:96小时32分
最后登录:2021-06-03
在线时长:96小时32分
- 粉丝26
- 金钱32351
- 威望40
- 积分33711