在ThinkPHP7中实现验证码需手动集成扩展包,安装topthink/think-captcha,配置captcha.php参数,显式注册/captcha/:id路由,用captcha_check或Captcha::check校验,模板中通过动态src显示并确保session启用。

在ThinkPHP7中实现验证码功能,需要手动集成验证码类库并配置路由、控制器和视图,因为TP7官方不再内置验证码组件,直接调用会报错 Class 'thinkcaptchaCaptcha' not found。
安装验证码扩展包
执行 Composer 命令安装社区维护的兼容 TP7 的验证码包:composer require topthink/think-captcha。
安装完成后,该包会自动注册服务提供者,无需手动在 config/app.php 中添加服务类——【若手动添加了 thinkcaptchaCaptchaServiceProvider,会导致启动异常】。
配置验证码参数
在 config/ 目录下新建 captcha.php 配置文件,内容如下:
立即学习“PHP免费学习笔记(深入)”;
'length' => 4, 'width' => 130, 'height' => 46, 'useZh' => false, 'useCurve' => true, 'useNoise' => true。
其中 width 和 height 必须与前端 img 标签的宽高属性一致,否则显示拉伸或截断;【length 值必须为整数且不能大于6,设为0或字符串将导致生成空验证码】。
注册验证码路由
打开 app/route/app.php,在闭包或 Route::group 中添加:
Route::get('captcha/:id', '\think\captcha\CaptchaController@make');
这一步必须显式注册,TP7 不再自动绑定 /captcha 路由;:id 是可选参数,用于区分多组验证码(如登录页、注册页),不传时默认使用 default 驱动。
在控制器中验证用户输入
方法一:使用助手函数 verify
if (!captcha_check($request->param('captcha'))) { return json(['code'=>0,'msg'=>'验证码错误']); }。
方法二:使用门面调用
use thinkacadeCaptcha; → Captcha::check($captcha),注意该方法返回布尔值,且只校验一次——【校验成功后会立即清除 session 中的验证码值,二次调用必返回 false】。
在模板中显示验证码图片
第一步:在模板中插入 img 标签,src 指向已注册的路由:
。
第二步:添加输入框接收用户填写内容:
。
第三步:确保页面加载时 session 已启用——TP7 默认开启,但若在中间件中调用了 session_close() 或禁用了 session 驱动,则验证码无法生成和校验。



















