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

Cam*_*ron 3 php cakephp

在我的CakePHP应用程序中,我返回JSON并退出某些请求.这方面的一个例子是尝试作为GET请求访问登录API:

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

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

关于如何解决这个问题的任何想法?或至少改善它.

更新:Cake版本2.3.0

mar*_*ark 36

您可以利用新的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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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