为CakePHP发送正确的JSON内容类型

时间:2013-02-18 21:46:33

标签: php cakephp

在我的CakePHP应用程序中,我返回JSON并退出某些请求。例如,尝试以GET请求的形式访问API以进行登录:

header('Content-Type: application/json');
echo json_encode(array('message'=>'GET request not allowed!'));
exit;

但是我必须在echo中添加内容类型前缀,以便将其作为JSON发送。否则我在另一端的代码会将它解释为不同。

有关如何解决此问题的任何想法?或至少改善它。

更新:Cake版本2.3.0

1 个答案:

答案 0 :(得分:35)

您可以利用新的2.x响应对象:

public function youraction() {
    // no view to render
    $this->autoRender = false;
    $this->response->type('json');

    $json = json_encode(array('message'=>'GET request not allowed!'));
    $this->response->body($json);
}

请参阅http://book.cakephp.org/2.0/en/controllers/request-response.html#cakeresponse

此外,您可以使用功能强大的休息功能和RequestHandlerComponent自动实现此功能,如下所示:http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

您只需要允许扩展名json并将您的操作称为/controller/action.json。 然后,cake将自动使用JsonView,您可以将数组传入。它将通过视图类生成JSON和有效响应。

两种方式都比“退出”解决方案更清晰 - 尝试对包含die()/ exit()的代码进行单元测试。这将悲惨地结束。所以最好不要在代码中首先使用它。