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'
]);
相关推荐
IT_陈寒3 小时前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端
码事漫谈4 小时前
一天搭出 80% 的 Agent,然后卡在 95% 到死
后端
leonkay4 小时前
C# 锁机制——【2】深入原理
开发语言·后端·spring·c#·个人开发
江湖十年4 小时前
在 Go 中使用 dyno 包处理动态对象
后端·面试·go
八角丶4 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
山岚的运维笔记4 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
平头哥AI6 小时前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
ZGG0037 小时前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
geovindu8 小时前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云
geovindu9 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式