首页 > 解决方案 > 更改 HTTP 标头中的状态代码而不影响 Yii 1 Restful API 中的返回数据

问题描述

我想在 Yii 1 中返回带有 HTTP 错误代码的数据。所以我使用以下方式获取数据。

  $code = (0 == $ex->getCode()) ? (isset($ex->statusCode) ? $ex->statusCode : 500) : $ex->getCode();
            $this->setOutputError($ex->getMessage());
            $this->setOutputCode($code);

当我以这种方式使用它时,API 返回带有 200 错误代码的数据,如下所示 在此处输入图像描述

但是我想改变标题状态200,所以我为此抛出了异常,然后输出数据也改变了。我只想更改标题状态。

$code = (0 == $ex->getCode()) ? (isset($ex->statusCode) ? $ex->statusCode : 500) : $ex->getCode();
            $this->setOutputError($ex->getMessage());
            $this->setOutputCode($code);

            throw new CHttpException(400, 'Bad Request');

在此处输入图像描述

标签: phpapiexceptionyiiheader

解决方案


Yii 1.1 没有响应抽象,需要使用http_response_code()来改变响应状态码:

$code = (0 == $ex->getCode()) ? (isset($ex->statusCode) ? $ex->statusCode : 500) : $ex->getCode();
$this->setOutputError($ex->getMessage());
$this->setOutputCode($code);

http_response_code(400);

或者,您也可以使用header(),但这更棘手。


推荐阅读