在我的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
答案 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()的代码进行单元测试。这将悲惨地结束。所以最好不要在代码中首先使用它。