Yii2自带验证码实现

  总共分为三个方面:控制器配置、模型rules配置和视图配置。

       第一步:控制器配置

    将下列代码配置在actions中,请求验证码链接对应为 “控制器/captcha”

1
2
3
4
5
6
7
8
9
10
11
'captcha' => [
         'class' => 'yii\captcha\CaptchaAction',
    //     'backColor'=>0x000000,//背景颜色
         'maxLength' => 4, //最大显示个数
         'minLength' => 4,//最少显示个数
         'padding' => 5,//间距
         'height'=>45,//高度
         'width' => 75,  //宽度
      //   'foreColor'=>0xffffff,     //字体颜色
         'offset'=>4,
 ],

  

       第二步:模型rules配置,即验证配置。

    首先声明公共变量 

1
public $verifyCode

         其次在rules方法中配置验证

['verifyCode', 'captcha','captchaAction'=>'user/captcha','on' => ['login']]

    在这条配置中的"captchaAction"加入了配置,即控制器的路由,如果不进行配置的话会走site/captcha的路由,这是框架样例的路由。

       第三步:视图中的配置

    在ActiveForm中加入如下代码即可了

      

1
2
3
4
5
6
7
8
<?= $form->field($model,'verifyCode')->widget(
                    Captcha::className(),
                    [
                        'template' => '{image}{input}',
                        'captchaAction'=>'user/captcha', // 此注意要使用自己配置的那个控制器验证码路由
                        'imageOptions'=>[ 'style'=>'cursor:pointer;width:77px']
                    ]
                )

  最后有一个巨坑的问题:由于编码过程中使用了一些windows下的换行符或者空格,导致了未知的输出,会导致验证码图片不能够正常的生成。

    这是需要在CaptchaAction类中的renderImageByGD方法中加入如下代码:

1
2
3
4
5
6
imagecolordeallocate($image, $foreColor);
 
ob_clean(); // 此行为插入代码,目的是清空缓存区为输出图片提供干净空间。
ob_start();
imagepng($image);
imagedestroy($image);

  

posted @   思何  阅读(749)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版
点击右上角即可分享
微信分享提示