ThinkPHP6 设置响应 `Content-Type: application/json`

方式 1:最常用 → json() 助手函数(自动带上 application/json

TP6 的 json() 响应默认响应头就是 Content-Type: application/json; charset=utf-8,无需手动设置。

php 复制代码
<?php
namespace app\controller;

class Test
{
    public function index()
    {
        $data = [
            'code' => 200,
            'msg'  => 'success',
            'data' => ['name' => 'test']
        ];
        return json($data);
    }
}

方式 2:Response 对象手动设置 header

如果你自己创建响应,可以手动指定 Content-Type

php 复制代码
use think\Response;

public function index()
{
    $data = ['code' => 200];
    return Response::create($data)
        ->header('Content-Type', 'application/json; charset=utf-8');
}

但一般不这么写,直接用 json() 更简洁。

方式 3:返回原始字符串(重点!你前面问到的 JSON 字符串坑)

⚠️ 大坑:如果你直接 return json_encode () 字符串,TP 默认返回 text/html!

php 复制代码
// ❌ 错误!返回头是 text/html
return json_encode(['code'=>200]);

想要原始字符串并且 Content-Type:application/json,必须:

php 复制代码
// ✅ 正确
return response(json_encode(['code'=>200]))
    ->header('Content-Type', 'application/json; charset=utf-8');

尽量不要手写 json_encode,优先框架 json() 方法。

方式 4:全局统一设置(所有接口生效)

中间件全局统一响应头

创建中间件,或者在 app/middleware.php 使用全局响应中间件:

php 复制代码
<?php
namespace app\middleware;

class JsonHeader
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        // 如果是JSON响应,追加header
        if ($response instanceof \think\response\Json) {
            $response->header('Content-Type','application/json; charset=utf-8');
        }
        return $response;
    }
}

注册为全局中间件。

方式 5:json 响应自定义附加 Header

php 复制代码
return json([
    'code' => 200
])->header([
    'Content-Type' => 'application/json; charset=utf-8',
    'Token' => 'xxxx'
]);
相关推荐
用户3945071778247 小时前
Git 安装与 SSH 公钥配置教程
后端
政采云技术7 小时前
工单处理的智能革命:钉钉AI助理辅助系统探索
人工智能·后端·ai编程
Zane19948 小时前
钻石继承调用哪个方法?一文讲透 MRO 与 C3 线性化算法
后端·python
码事漫谈8 小时前
国产替代的硬核样本:金仓数据库如何撑起固井软件的数据底座
后端
老孙讲技术8 小时前
【4G IPC 上云】临时点位怎么免布线上云?listDeviceDetailsByPage + 辅码流预览|智慧工地实战
后端·物联网
铁皮饭盒9 小时前
DeepSeek V4 Pro 0813发布了, 也可以部署到 Codex 了
前端·javascript·后端
苏三说技术10 小时前
推荐一个牛逼的企业智能招聘系统
后端
达达尼昂10 小时前
Flutter AI Harness 如何让 Agent 参与软件开发全流程
android·人工智能·后端
k4m7v2pz10 小时前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson