thinkphp6验证码功能需手动安装扩展并启用session,支持模板快速渲染、配置文件集中管理、后端一键校验及自定义扩展,涵盖安装启用、渲染刷新、配置优化、校验方式和自定义类五大核心用法。

ThinkPHP6 的验证码功能虽是外置扩展,但集成简单、调用直接,日常开发中高频出现在登录、注册、评论、表单提交等场景。掌握以下 5 大核心用法,能显著减少重复配置、避免常见报错、提升验证可靠性。
一、安装与基础启用(必做两步)
验证码不是框架内置模块,必须手动引入并确保 Session 可用:
- 执行命令安装:
composer require topthink/think-captcha - 开启 Session 中间件:打开
app/middleware.php,取消注释\think\middleware\SessionInit::class - 确认 PHP 环境已启用 GD 库(验证码图像生成依赖)
二、模板中快速渲染与刷新
无需写控制器逻辑即可展示动态验证码,支持点击切换:
- 最简写法:
{:captcha_img()}—— 自动生成带 onclick 刷新的<img>标签 - 自定义 src 写法:
<img src="%7B:captcha_src()%7D" onclick="this.src='{:captcha_src()}'+'?'+Math.random()">,便于加样式或适配 UI 框架 - 注意 input 的 name 建议统一为
captcha,方便后端校验时自动匹配
三、配置文件集中管理(推荐方式)
在 config/captcha.php 中统一设置,比硬编码更易维护:
- 基础项示例:
'length' => 4(位数)、'fontSize' => 28(字号)、'useNoise' => false(去杂点提升可读性) - 防绕过关键项:
'expire' => 120(设为 120 秒,兼顾用户体验与安全性) - 若需中文或算术题,启用
'useZh' => true或'math' => true,注意字体文件需存在
四、后端一键校验(两种主流方式)
无需手动读 session 对比,框架提供开箱即用的验证入口:
- 助手函数方式(轻量直接):
if (!captcha_check(input('post.captcha'))) { // 验证失败 } - 验证器规则方式(适合复杂表单):
'captcha' => 'require|captcha',配合 Validate 类统一校验 - 注意:验证码默认「一次性有效」,校验成功后自动失效,无需手动清除
五、自定义验证码类(按需扩展)
当默认样式/逻辑不满足业务需求时,可继承或重写:
- 新建控制器方法,实例化
think\captcha\Captcha类,传入定制参数(如干扰线、背景色、字体路径) - 调用
$captcha->entry()直接输出图片流,适用于独立验证码接口(如 /api/captcha) - 若需返回 JSON + 图片 base64,可结合
ob_get_contents()捕获输出并编码
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











