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 ); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理