Yii2中手动使用内置验证码组件

原文:yii2使用验证码组件,有所修改、补充

yii2自带的例子里面有一个关于验证码的使用例子,但是本篇文章讨论的是用另外一种方式手动生成和验证验证码。

生成验证码

在要使用验证码的Controller里面实现actions方法:

class TestController extends Controller{
    public function actions(){
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'maxLength' => 4, //生成的验证码最大长度
                'minLength' => 4  //生成的验证码最短长度
            ]
        ];
    }
}

以上代码通过实现actions方法创建了一个叫captchatest的action,上面的action我只填了两个参数,还有其他参数可以参考yii\captcha\CaptchaAction的publish属性

在页面中使用验证码

在要使用验证码的view里面插入以下代码:

<?php echo Captcha::widget(['name'=>'captchaimg','captchaAction'=>'captcha','imageOptions'=>['id'=>'captchaimg', 'title'=>'换一个', 'alt'=>'换一个', 'style'=>'cursor:pointer'],'template'=>'{image}']); ?>

以上代码主要需要正确填写captchaAction,填写你刚才创建的captchaAction,需要完整的namespace,然后会生成一个img

补充

这种手动的、没有使用Form方式的验证码有个问题,就是不会自动刷新
建议在控制器里加载视图层前,使用代码:

$this->createAction('captcha')->getVerifyCode(TRUE);

来手动刷新验证码

验证验证码

在action中接收到表单传来的验证码后,使用:

$this->createAction('captcha')->validate($captchCode, false); //$captchCode为用户输入的验证码

validate函数会返回true/false,该函数的第二个参数为是否对大小写敏感

2 条评论

点击这里取消回复。

昵称
  1. zhang

    你好站长,用的你和kenvix开发的贴吧自动签到系统,我的服务器环境是wdcp一键安装的lnmp环境,执行do.php提示 “服务器PHP不支持MySql数据库”如何解决?这个环境是有mysql的。

    1. mokeyjay

      可能是你的PHP没有开启mysql扩展。更多疑问请到 这里 发Issue