Skip to content
Advertisement

Change status code in HTTP header without affecting return data in Yii 1 Restful API

I want to return data with the HTTP error code in Yii 1. So I used the following way to get the data.

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

When I use it this way API returns data with 200 error code as below enter image description here

But I want to change header status 200, so I threw exception for this, then output data also changed. I want to change only the header status.

$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');

enter image description here

Advertisement

Answer

Yii 1.1 does not have response abstraction, you need to use http_response_code() to change response status code:

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

http_response_code(400);

Alternatively you may also use header(), but this is more tricky.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement