Code点火器4-默认情况下,以JSON而不是XML的形式返回数组数据



我只是在尝试使用新的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-响应类型

相关内容

  • 没有找到相关文章

最新更新