简述
当 Web 应用程序处理请求时,它会生成一个响应对象,其中包含 HTTP 标头、正文和 HTTP 状态代码。在大多数情况下,您将使用响应应用程序组件。默认情况下,它是yii\web\Response的一个实例。
要管理响应 HTTP 状态代码,请使用yii\web\Response::$statusCode属性。yii\web\Response::$statusCode的默认值为200。
第 1 步-向SiteController添加一个名为actionTestResponse 的函数。
public function actionTestResponse() {
Yii::$app→response->statusCode = 201;
}
第 2 步- 如果您将 Web 浏览器指向http://localhost:8080/index.php?r=site/testresponse,您应该注意到 201 Created 响应 HTTP 状态。
如果您想指示请求不成功,您可以抛出预定义的 HTTP 异常之一 -
-
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。
第 3 步 - 修改actionTestResponse函数,如以下代码所示。
public function actionTestResponse() {
throw new \yii\web\GoneHttpException;
}
第 4 步- 在 Web 浏览器的地址栏中键入http://localhost:8080/index.php?r=site/test-response,您可以看到410 Gone响应 HTTP 状态,如下图所示。
第 5 步 - 您可以通过修改响应组件的headers属性来发送 HTTP 标头。要向响应添加新标头,请修改actionTestResponse函数,如以下代码中给出的。
public function actionTestResponse() {
Yii::$app->response->headers->add('Pragma', 'no-cache');
}
第 6 步- 转到http://localhost:8080/index.php?r=site/test-response,您将看到我们的 Pragma 标头。
Yii 支持以下响应格式 -
-
HTML - 由 yii\web\HtmlResponseFormatter 实现。
-
XML - 由 yii\web\XmlResponseFormatter 实现。
-
JSON - 由 yii\web\JsonResponseFormatter 实现。
-
JSONP - 由 yii\web\JsonResponseFormatter 实现。
-
RAW - 没有任何格式的响应。
第 7 步- 要以JSON格式响应,请修改actionTestResponse函数。
public function actionTestResponse() {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'id' => '1',
'name' => 'Ivan',
'age' => 24,
'country' => 'Poland',
'city' => 'Warsaw'
];
}
第 8 步- 现在,在地址栏中输入http://localhost:8080/index.php?r=site/test-response,您可以看到以下JSON响应。
Yii 通过发送 Location HTTP 头来实现浏览器重定向。您可以调用yii\web\Response::redirect()方法将用户浏览器重定向到 URL。
第 9 步- 以这种方式修改actionTestResponse函数。
public function actionTestResponse() {
return $this->redirect('http://www.cainiaoya.com/');
}
现在,如果您访问http://localhost:8080/index.php?r=site/test-response,您的浏览器将被重定向到TutorialsPoint网站。