ThinkPHP6项目基操(12.实战部分 验证码)

验证码

  • 一、安装验证码
  • 二、模板中使用
  • 三、修改验证码配置
  • 四、自定义验证码
    • 1. 创建
    • 2. 配置
    • 3. 使用
  • 五、验证

TP6 有内置验证码插件,只需简单安装和配置即可使用,而且验证码的验证也非常方便,下面开始表演。

一、安装验证码

composer require topthink/think-captcha

二、模板中使用

将原来静态页面的验证码图片替换为{:captcha_img()},这个会自动生成验证码图片。

<div style="margin-left: 10px;">
  {:captcha_img()}
div>

生成的html代码为:

<img src="/captcha.html?0.12285642498823002" alt="captcha" onclick="this.src="/captcha.html?"+Math.random();">

从生成的代码可以看出,点击图片可以切换图片。生成的图片:
在这里插入图片描述

如果图片没有出来,检查下路径是否正确,路由是否正确。浏览器直接访问http://tp6.com/captcha也会显示二维码,如果没有显示就考虑路由的正确性。

三、修改验证码配置

config目录新建captcha.php



return [
    'length' => 4,
    'codeSet'   =>  '0123456789',
    'useCurve' => false
];

ThinkPHP6项目基操(12.实战部分 验证码)_第1张图片

具体可配置的项:

参数 描述 默认
codeSet 验证码字符集合
expire 验证码过期时间(s) 1800
math 使用算术验证码 false
useZh 使用中文验证码 false
zhSet 中文验证码字符串
useImgBg 使用背景图片 false
fontSize 验证码字体大小(px) 25
useCurve 是否画混淆曲线 true
useNoise 是否添加杂点 true
imageH 验证码图片高度,设置为0为自动计算 0
imageW 验证码图片宽度,设置为0为自动计算 0
length 验证码位数 5
fontttf 验证码字体,不设置是随机获取
bg 背景颜色 [243, 251, 254]
reset 验证成功后是否重置 true

四、自定义验证码

1. 创建

除了使用默认的方式{:captcha_img()},还可以通过think\captcha\facade\Captcha类自行创建验证码。



namespace app\admin\controller;
use think\captcha\facade\Captcha;

class Verify
{
     
    public function index(){
     
        return Captcha::create();
    }
}

通过这个控制器也能正常返回验证码:
ThinkPHP6项目基操(12.实战部分 验证码)_第2张图片

2. 配置

自定义验证码也可以配置,可以在config/captcha.php文件里定义一个配置,然后在创建的时候传入配置key即可:
captcha.php:



return [
    'length' => 4,
    'codeSet'   =>  '0123456789',
    'useCurve' => false,
	// 配置名称可以随意取
    'my_set' => [
        'length' => 3,
        'codeSet' => 'abcdefg'
    ]
];

修改Verify控制器:

return Captcha::create('my_set');

秀一下:
ThinkPHP6项目基操(12.实战部分 验证码)_第3张图片

3. 使用

<img src="{:url('verify/index')}" class="layadmin-user-login-codeimg">

想要点击切换验证码,可以添加个onclick事件,自行仿照原生的做法。

五、验证

框架的内置验证功能:

$this->validate($data,[
    'captcha|验证码'=>'require|captcha'
]);

如果没有使用内置验证功能,则可以调研内置的函数手动验证

if(!captcha_check($captcha)){
     
 // 验证失败
};

这里需要注意的是TP6默认没有开启Session,需要自行开启,而这里的验证码验证需要使用到session功能,所以修改app目录下的中间件文件middleware.php,将\think\middleware\SessionInit::class的注释放开即可。

你可能感兴趣的:(thinkphp,thinkphp,验证码,php,thinkphp6)