本篇内容会全方面通过实例的方式讲一下TP6里面验证码的各种使用方法
一、安装验证码扩展包
composer require topthink/think-captcha
二、开启Session
找到app/middleware.php 文件,找到下面一行,并取消前面的注释
\think\middleware\SessionInit::class
三、因为要用到模板,需要安装下模板扩展
composer require topthink/think-view
四、TP6内置验证码生成以及验证
html代码:
<h3>内置验证码生成以及验证:</h3> <div>{:captcha_img()}</div> <form action="/index.php/test_session/verify01" method="post"> <p>请输入验证码: <input type="text" name="yzm" /> </p> <p><input type="submit" value="提交"></p> </form>
html效果:
控制器代码:
1 /** 2 * TP6内置验证码生成以及验证 3 */ 4 public function show01() 5 { 6 return view("test/show01"); 7 } 8 /** 9 * TP6内置验证码生成以及验证 10 */ 11 public function verify01() 12 { 13 $data = request()->param(); 14 15 if (empty($data['yzm'])) 16 { 17 return json(array('status'=>'FAIL','msg'=>'请输入验证码!')); 18 } 19 //调用内置的函数手动验证 20 if(!captcha_check($data['yzm'])){ 21 return json(array('status'=>'FAIL','msg'=>'验证失败!')); 22 }else{ 23 return json(array('status'=>'FAIL','msg'=>'验证成功!')); 24 } 25 }
五、自定义验证码 生成以及验证
HTML代码:
<h3>自定义验证码生成以及验证:</h3> <div><img src="/index.php/test_session/createYzm" onclick="this.src='/index.php/test_session/createYzm?r='+Math.random()"></div> <form action="/index.php/test_session/verify02" method="post"> <p>请输入验证码: <input type="text" name="yzm" /> </p> <p><input type="submit" value="提交"></p> </form>
控制器代码:
控制器文件顶部引入 Captcha 类use think\captcha\facade\Captcha;
1 /** 2 * 创建验证码 3 */ 4 public function createYzm() 5 { 6 return Captcha::create(); 7 } 8 /** 9 * 自定义验证码 生成以及验证 模板 10 */ 11 public function show02() 12 { 13 return view("test/show02"); 14 } 15 16 /** 17 * 自定义验证码 生成以及验证 18 */ 19 public function verify02() 20 { 21 $data = request()->param(); 22 23 if (empty($data['yzm'])) 24 { 25 return json(array('status'=>'FAIL','msg'=>'请输入验证码!')); 26 } 27 //调用内置的函数手动验证 28 if(!captcha_check($data['yzm'])){ 29 return json(array('status'=>'FAIL','msg'=>'验证失败!')); 30 }else{ 31 return json(array('status'=>'FAIL','msg'=>'验证成功!')); 32 } 33 }
对比说明:
使用自定义的更加灵活一些,可以搭配各种样式,
使用内置的是方便一点点。
我是推荐使用自定义的验证码,这样代码的来龙去脉比较清晰,有问题也方便排错。
六、验证码常用的配置
配置文件:config/captcha.php
常用到的配置有以下几个:
1 //验证码位数 2 'length' => 5, 3 // 验证码字符集合 4 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', 5 // 是否使用混淆曲线 6 'useCurve' => true, 7 //是否添加杂点 8 'useNoise' => true, 9 //背景颜色 10 'bg' => [243, 251, 254],
注意:
验证码的高度 和宽度不要修改,设置为0即可,不然设置的小了,会出现验证码显示不全的问题。
如果需要调整大小,通过页面的css样式进行调整验证码的 width 和 height 属性
七、生成多个不同配置的验证码
设置配置文件config/captcha.php:
生成不同配置的验证码
1 /** 2 * 创建新验证码 3 */ 4 public function createNewYzm() 5 { 6 //生成 verify配置的验证码 7 return Captcha::create('verify'); 8 //生成 my_verify的验证码 9 // return Captcha::create('my_verify'); 10 }
注意:
生成不同配置的验证码多个,最终验证只有最新的生成的验证码是有效的。
并不是生成多种不同配置的验证码,就有多重验证方式。