thinkphp6需手动引入think-captcha扩展实现验证码功能,关键步骤包括:安装扩展包、启用session中间件、配置captcha.php、控制器返回captcha::create()、模板用{:captcha_img()}显示、后端用captcha_check()校验。

ThinkPHP6本身不带验证码功能,必须手动引入扩展包才能使用。整个过程不难,但有几个关键点不能跳过:装对包、开好 Session、配好路由、前端能刷图、后端能验码。
安装验证码扩展包
在项目根目录执行命令安装官方维护的验证码组件:
- composer require topthink/think-captcha
安装完成后,检查 composer.json 的 require 区域是否已出现 "topthink/think-captcha": "^2.0"(或对应稳定版)。若无,则安装未成功,需重试或清理 Composer 缓存。
开启 Session 支持
验证码依赖 Session 存储验证码值,必须启用。打开 app/middleware.php,确保以下中间件未被注释:
- \think\middleware\SessionInit::class
如果该行前面有 //,请删掉。重启服务后可通过 session('test', 'ok'); dump(session('test')); 测试是否生效。
配置并生成验证码图片
在 config/ 目录下新建 captcha.php,写入基础配置:
return [
'length' => 4,
'useNoise' => true,
'useCurve' => false,
'fontSize' => 28,
'imageW' => 200,
'imageH' => 60,
];
然后在任意控制器中添加一个方法,例如 LoginController 中的 captcha 方法:
- 引入门面:use think\captcha\facade\Captcha;
- 方法内直接写:return Captcha::create();
这个方法会自动输出一张 PNG 图片,无需 return view 或 echo。
前端显示与刷新
在模板(如 login.html)中插入以下代码即可显示可点击刷新的验证码:
- {:captcha_img()} —— 最简方式,自动生成 img 标签和 onclick 刷新逻辑
- 或手写:
访问页面时若看不到图,先检查浏览器能否直接打开 /login/captcha 路径;打不开说明路由没注册或控制器方法未正确响应。
后端验证用户输入
表单提交后,在接收数据的方法里调用校验函数:
- 使用助手函数:if (!captcha_check($input_code)) { /* 验证失败 */ }
- 或用门面:if (!Captcha::check($input_code)) { ... }
注意:$input_code 必须是用户 POST 提交的纯字符串,前后不能含空格;校验失败不会自动清 Session,但默认配置中 reset=true,验证通过后会自动失效旧码。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











