我只是在尝试使用新的Codeigiiter4框架。我创建了一条路线&将其附加到一个简单的方法todos
中,该方法本应在我尝试点击URL时以JSON形式返回todos(任务(列表,但它以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-响应类型