Yii 响应
当Web应用程序处理请求时,它会生成一个响应对象,其中包含HTTP标头,正文和HTTP状态码。在大多数情况下,您将使用响应应用程序组件。默认情况下,它是 yii \ web \ Response的 一个实例。
要管理响应HTTP状态代码,请使用 yii \ web \ Response :: $ statusCode 属性。 yii \ web \ Response :: $ statusCode 的默认值是200。
步骤1 - 将一个名为 actionTestResponse 的函数添加到 SiteController 。
public function actionTestResponse() { Yii::$app→response->statusCode = 201; }
第2步 - 如果您将浏览器指向 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 =站点/测试响应 ,您可以看到 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 =站点/测试响应 ,您可以看到以下 JSON 响应。
Yii通过发送Location HTTP头来实现浏览器重定向。您可以调用 yii \ web \ Response :: redirect() 方法将用户浏览器重定向到URL。
第9步 - 以 这种方式修改 actionTestResponse 函数。
public function actionTestResponse() { return $this->redirect('http://www.codingdict.com/'); }
现在,如果您转到 http:// localhost:8080 / index.php?r = site / test-response, 您的浏览器将在 codingdict 网站上重定向。
发送文件
Yii提供了以下方法来支持文件发送 -
- yii \ web \ Response :: sendFile() - 发送一个现有的文件。
- yii \ web \ Response :: sendStreamAsFile() - 将现有文件流作为文件发送。
- yii \ web \ Response :: sendContentAsFile() - 将文本字符串作为文件发送。
这样修改actionTestResponse函数 -
public function actionTestResponse() { return \Yii::$app->response->sendFile('favicon.ico'); }
输入 http:// localhost:8080 / index.php?r =站点/测试响应 ,您将看到 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事件。
下一章:Yii URL格式
Yii应用程序处理所请求的URL时,首先将URL解析为路由。然后,为了处理请求,这条路由被用来实例化相应的控制器动作。这个过程被称为 路由 。相反的过程称为URL创建。该 urlManager 应用组件负责路由和URL创 ...