thinkphp 8.0 默认不内置图形验证码,需安装 topthink/think-captcha 扩展;安装后自动注册,可选配置 captcha.php,通过路由生成图片,前端用 img 标签加载并防缓存,控制器中用 captcha::check() 校验。

ThinkPHP 8.0 默认不再内置图形验证码(Captcha)类,需通过官方扩展包 topthink/think-captcha 实现图片验证码功能。核心步骤是安装扩展、配置参数、注册路由、生成与校验。
安装验证码扩展包
在项目根目录执行 Composer 命令安装:
composer require topthink/think-captcha
安装后,扩展会自动注册服务,无需手动添加服务提供者(TP8 使用自动发现机制)。
配置验证码参数(可选)
如需自定义验证码样式(长度、字体、背景色等),可在 config/captcha.php 中配置。首次使用可先不新建配置文件,直接使用默认设置;需要时再发布配置:
php think captcha:build
该命令会生成默认配置文件 config/captcha.php,之后可按需修改,例如:
- length:验证码字符数,默认 5
- fontSize:字体大小,默认 25
- useNoise:是否启用干扰点,默认 true
- useCurve:是否启用干扰曲线,默认 true
-
bg:背景色,如
[240, 240, 240]
注册验证码路由并显示图片
在 app/route/app.php 中注册验证码路由(推荐使用闭包或控制器方法):
use think\captcha\Captcha;
Route::get('captcha', function () {
$captcha = new Captcha();
return $captcha->create();
});
前端页面中用 <img> 标签加载,注意加随机参数防止缓存:
在控制器中校验验证码
用户提交表单时,在控制器中调用 Captcha::check($value, $id) 方法验证:
use think\captcha\Captcha;
if (!Captcha::check($request->param('captcha'), '')) {
return json(['code' => 0, 'msg' => '验证码错误']);
}
说明:
- $value 是用户输入的验证码字符串(需 trim 去空格)
- $id 为验证码标识,留空表示默认 ID(即上面路由中未指定 ID 的情况)
- 校验通过后,验证码会自动失效(一次有效)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











