ThinkPHP6.0统一API返回格式需定义标准结构{code,msg,data},通过BaseController封装success/error方法、配置default_return_type='json',并补充CORS中间件解决跨域与响应头问题。

ThinkPHP6.0 配置 API 返回格式,核心目标是让所有接口统一输出结构清晰、类型明确、可被前端直接解析的 JSON 响应。不需要每个控制器都重复写 json(),也不靠手动拼接字符串——关键在于响应构造方式 + 全局约定 + 中间件/基类协同。
统一返回结构(先定好“长什么样”)
推荐标准格式:
{ "code": 200, "msg": "操作成功", "data": {} }其中:
• code 是业务状态码(非 HTTP 状态码),如 200 成功、400 参数错误、500 服务异常
• msg 是面向前端或调试人员的提示语,中文友好、不带标点更稳妥
• data 是实际数据体,无论成功失败都保留该字段(失败时可为 null 或空数组)
用 BaseController 封装 success / error 方法(最常用)
在 app/controller/BaseController.php 中定义:
- 继承
think\Controller - 提供
success($data = null, $msg = '操作成功')和error($msg = '操作失败', $code = 400, $data = null) - 两个方法内部都调用
return json([...]),并支持JSON_UNESCAPED_UNICODE显示原始中文 - 子控制器继承它后,直接写
$this->success($user)或$this->error('参数缺失', 401)
全局设 default_return_type = 'json'(适合纯 API 项目)
修改 config/app.php:
- 将
'default_return_type' => 'html'改为'default_return_type' => 'json' - 同时禁用
view_init中间件,避免模板引擎干扰:在路由分组或全局中间件配置中移除\think\middleware\ViewInit::class - 这样即使控制器里只写
return ['code'=>200],框架也会自动转成 JSON 响应(但不推荐省略封装,因缺少结构校验)
补充跨域与编码头(避免前端报错)
API 常见问题不是逻辑错,而是响应头不全:
- 中文乱码?确保响应含
Content-Type: application/json; charset=utf-8——json()默认已带,无需额外设置 - 跨域被拦?可在基类 success/error 方法末尾链式加头:
->header(['Access-Control-Allow-Origin' => '*']) - 更规范的做法是单独写一个 CORS 中间件,在
app/middleware.php或路由中全局注册
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











