thinkphp 6 需安装官方扩展 topthink/think-captcha,通过门面调用 captcha::create() 生成验证码,验证需手动添加 captcha 规则并确保字段名与标识一致,常见问题多因 gd 库缺失、session 未启用或 config/captcha.php 中 usezh 配置不当导致。

ThinkPHP 6 默认不带图形验证码功能,必须手动安装扩展并配置;直接用 captcha 函数或 Captcha 类会报错,因为核心没加载。
装哪个扩展?topthink/think-captcha 是唯一兼容 TP6 的官方方案
TP6 官方把验证码抽成了独立扩展,不是内置组件。别去 GitHub 找老版本或第三方魔改包,容易和 think-orm 或 PHP 8+ 冲突。
- 运行
composer require topthink/think-captcha(注意不是topthink/think-captcha6,后者已废弃) - 安装后自动注册服务提供者,无需手动改
app/provider.php - 如果提示
Class "think\captcha\Captcha" not found,大概率是 Composer 自动加载没刷新,执行composer dump-autoload
Captcha 类怎么调用?别在控制器里 new 实例
TP6 推荐用依赖注入或门面调用,直接 new Captcha() 会绕过配置、丢失字体路径和缓存驱动。
- 在控制器方法中用门面:
Captcha::create('login')('login'是验证码标识,用于区分不同页面的验证) - 想自定义参数?传数组:
Captcha::create(['length' => 4, 'fontSize' => 20]) - 如果返回空白图或 500 错误,检查
runtime/cache/是否可写,或确认config/captcha.php中useZh设为false(中文验证码依赖 GD 字体,90% 的问题出在这)
表单提交后怎么验证?$this->validate() 不认 captcha 规则
TP6 的验证器默认没绑定验证码规则,得手动加;否则 captcha|require|captcha 这种规则会一直失败。
- 在验证器类里加方法:
protected $rule = ['captcha' => 'require|captcha']; - 关键点:必须确保提交字段名是
captcha,且和Captcha::create()的标识一致(比如都用'login'),否则captcha验证器查不到对应 session 记录 - 调试时可临时打印:
dump(session('captcha_login'));看是否生成成功;session key 名是captcha_ + 标识,不是固定captcha
验证码图片不显示、验证总失败——八成是 session 未启用或 GD 库缺失;TP6 不报 GD 错误,只静默返回空响应。上线前务必在服务器跑 php -m | grep gd 和 session_start() 测试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











