php - Codeigniter4 - 默认情况下将数组数据返回为 JSON 而不是 XML
问题描述
我只是在尝试使用新的 Codeiginiter4 框架。我创建了一个路由并将其附加到一个简单的方法todos
,当我尝试点击 URL 时,它应该以 JSON 形式返回 todos(task) 列表,但它以 XML 格式返回。代码很简单,
class Home extends BaseController
{
use ResponseTrait;
public function index()
{
return view('welcome_message');
}
public function todos()
{
return $this->respondCreated(['todos' => ['task' => 'Check out new CI4']]);
}
//--------------------------------------------------------------------
}
// 结果
<response>
<todos>
<task>Check out new CI4</task>
</todos>
</response>
后来我发现,如果我将数组显式编码为 JSON(使用 json_encode),它会在浏览器中将结果作为 JSON 返回。像这样,
public function todos()
{
return $this->respondCreated(json_encode(['todos' => ['task' => 'Check out new CI4']]));
}
所以我的问题是有没有办法在 CI4 的浏览器中默认返回数组为 JSON 格式?
我正在使用的 CI 版本:v4.0.2
解决方案
你要求一个 xml 响应,所以 CI4 会给你你所要求的。您应该在返回响应之前定义您的 http 标头以请求 json。
public function todos()
{
$this->request->setHeader('Accept', 'application/json');
return $this->respondCreated(['todos' => ['task' => 'Check out new CI4']]);
}
注意:如果你总是想要 json 响应,你可以去app/Config/Format.php
注释掉一行,这样你的$supportedResponseFormats
变量看起来像这样:
public $supportedResponseFormats = [
'application/json',
// 'application/xml', // machine-readable XML
'text/xml', // human-readable XML
];
问题是您正在删除 CI4 以这种方式处理 xml 响应的能力。
查看 CI4 优秀文档以获取更多详细信息:https ://codeigniter.com/user_guide/outgoing/api_responses.html#handling-response-types
推荐阅读
- sql - 删除空值查询
- python - 如何让bash在另一个动作之前等待python脚本完成运行
- symfony - Symfony 4.1.6,序列化类对象时检测到循环引用
- php - 我如何对模型页面中创建的表进行计算
- c# - 如何将.Net Framework中的函数调用到.Net core
- sql - 我需要构造如下表,动态使用枢轴或非枢轴
- scala - 在 apache spark 数据帧中读取 pdf 文件
- c# - 在鼠标拖动时沿其自己的 X 轴来回移动对象
- c# - 如何更改日文日历的引导日期选择器输入字段中的日期格式
- java - 如何将计算数组和的任务动态划分为多个CompletableFuture