ThinkPHP 5.0 接口返回标准 JSON 应优先使用内置 json() 方法,自动设置 Content-Type 和编码;推荐封装 api_success() 统一响应格式,并用 try-catch 处理异常,确保控制器继承 think\Controller 且避免输出干扰。

在 ThinkPHP 5.0 中开发接口并返回标准 JSON 数据,核心是使用 json() 方法或手动设置响应头 + json_encode()。推荐优先使用框架内置的 json() 响应方法,它自动处理 Content-Type、字符编码和数据格式化。
基础 JSON 返回(推荐方式)
控制器中直接调用 $this->json() 或使用 response()->json():
namespace app\api\controller;
use think\Controller;
class User extends Controller
{
public function info()
{
$data = [
'code' => 200,
'msg' => '获取成功',
'data' => ['id' => 1, 'name' => '张三', 'email' => 'zhangsan@example.com']
];
return json($data); // ✅ 简洁、安全、自动设 header
}
}
统一 API 响应封装(提升可维护性)
建议在公共基类或助手函数中封装常用响应结构,避免重复写 code/msg/data:
// app/common.php 或 app/library/ApiReturn.php
function api_success($data = [], $msg = '操作成功', $code = 200)
{
return json([
'code' => $code,
'msg' => $msg,
'data' => $data,
'time' => time()
]);
}
// 在控制器中调用
public function list()
{
$users = db('user')->select();
return api_success($users, '用户列表获取成功');
}
处理异常与错误返回
接口需兼顾正常流与异常流,用 try-catch 配合统一错误格式:
立即学习“PHP免费学习笔记(深入)”;
public function delete($id)
{
try {
$result = db('user')->delete($id);
if (!$result) {
throw new \Exception('删除失败,用户不存在');
}
return api_success([], '删除成功');
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => $e->getMessage(),
'data' => []
])->code(500);
}
}
注意事项与常见问题
- 确保控制器继承
think\Controller,否则json()方法不可用 - 不要在返回前使用
echo、var_dump或开启输出缓冲未清理,会导致 JSON 格式损坏 - 中文乱码?确认文件保存为 UTF-8 无 BOM,数据库连接已设 charset=utf8mb4
- 如需兼容旧版 PHP(json() 中传对象,先用
toArray()转数组



















