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'
]);
相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
大勇前进5 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu5 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile5 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白805 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙5 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发5 天前
软件工程SOLID 五大设计原则
后端·软件工程