1

我正在使用文档中的 REST 指令在 Cake2.1.3 中编写 API。之前在 Cake1.3 中编写过一个,我将使用现在已弃用的 cakeError 类以请求格式的 HTTP 代码发出响应。例如,如果我请求http://example.com/widgets/ view/invalid-code.json, cakeError 会以 JSON 格式发送 400 错误代码(和消息)。Cake 2.x 使用异常来处理这个问题。根据文档

throw new BadRequestException()

发出带有“错误请求”消息的 400 HTTP 代码,但它似乎只在 HTML 格式中这样做。它可以自动以请求的格式响应吗?

4

2 回答 2

3

虽然您可以使用选定的答案来完成,但更简单的方法是让 Cake 自动呈现它。Cake 在渲染异常时使用相同的视图查找规则。这意味着只需将“json”文件夹添加到视图中的错误文件夹,并创建适当的视图文件。

/View
  /Errors
    /json
      error404.ctp
  error404.ctp

错误视图可能很简单,如下所示:

<?php

echo json_encode(array(
    'error' => array(
        'name' => $name,
        'url' => $url
    )
));

然后访问/users/missing-page.json将呈现以下json:

{"code":404,"url":"\/users\/missing-page.json","name":"Action UsersController::missing-page() could not be found."}
于 2014-01-10T18:09:43.427 回答
2

据我所知,没有办法自动执行此操作,但您可以编写自己的异常处理程序来检查请求并输出适当的内容类型。

于 2012-06-26T17:07:01.380 回答