【问题标题】:YII 2.0 REST API error handlerYII 2.0 REST API 错误处理程序
【发布时间】:2014-08-28 17:57:34
【问题描述】:

当 API 用作模块时,如何设置 REST API 错误处理程序。 我在 HTML 响应而不是 json/xml 响应中发现了一个无效的 404 异常。

这是带有无效入口点的示例 api URL

http://localhost.backend.com/api/v1/invalidentrypoint

这里的 api 是在一个模块中,而 v1 是嵌套在 api 模块中的。

回复是

未找到 (#404) 无法解析请求“api/v1/invalidentrypoint”。 上述错误发生在 Web 服务器处理您的请求时。 如果您认为这是服务器错误,请与我们联系。谢谢。

我期待这样的回应

**HTTP/1.1 404 未找到 日期:2014 年 3 月 2 日星期日 05:31:43 GMT 服务器:Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y 传输编码:分块

内容类型:应用程序/json;字符集=UTF-8 { "type": "yii\web\NotFoundHttpException", "name": "未发现异常", "message": "未找到请求的资源。", “代码”:0, “状态”:404 }**

请帮忙。

【问题讨论】:

  • 我不知道怎么做,但是如果您从休息客户端而不是浏览器发出请求,它会以 json 格式为您提供
  • 不,我已经试过了。可能是与我配置的模块有关的问题。我收到了完整的 HTML 作为响应!
  • 你使用自定义的errorHandler吗?我在模块中注册处理程序时遇到了类似的问题。但是在将其移入 config->components 后,它的工作方式与预期一样。
  • 我们有同样的问题。

标签: php yii yii2


【解决方案1】:

您是否尝试过将响应格式设置为 json?

只需添加到配置中:

'response' => [
    'format' =>  \yii\web\Response::FORMAT_JSON
]

这里有一些来自 yii 文档的信息: https://github.com/yiisoft/yii2/blob/master/docs/guide/rest-error-handling.md

编辑:使用 ethan 评论中的 yii 定义 定义是“json”,但使用 Yii 中定义的 const 是一个很好的做法

【讨论】:

  • 这是正确答案,应该这样标记。不过,可能最好将格式设置为 \yii\web\Response::FORMAT_JSON 而不是原始字符串 'json'。
  • 这不是设置所有响应的格式吗?如果 Yii 只提供 JSON 服务就好了。如果你有 HTML 页面和 API 怎么办?
【解决方案2】:

我将以下内容添加到我的 API 控制器的构造函数中:

public function __construct(string $id, Module $module, array $config = []) { parent::__construct($id, $module, $config); \Yii::$app->response->format = Response::FORMAT_JSON; }

这允许我为各个控制器指定 JSON 错误响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多