3

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

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

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

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

更新:蛋糕版本 2.3.0

4

1 回答 1

38

您可以利用新的 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() 的代码进行单元测试。这将悲惨地结束。所以最好不要一开始就在你的代码中使用它。

于 2013-02-18T22:11:35.583 回答