Yii - 響應



當 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 瀏覽器指向https://:8080/index.php?r=site/testresponse,您應該會注意到 201 已建立的響應 HTTP 狀態。

Created response HTTP status

如果您想指示請求不成功,您可以丟擲預定義的 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 瀏覽器的位址列中鍵入https://:8080/index.php?r=site/test-response,您可以看到如下所示的410 Gone響應 HTTP 狀態。

Gone Response HTTP Status

步驟 5 - 您可以透過修改響應元件的headers屬性來發送 HTTP 標頭。要向響應新增新的標頭,請按如下程式碼修改actionTestResponse函式。

public function actionTestResponse() {
   Yii::$app->response->headers->add('Pragma', 'no-cache');
}

步驟 6 - 轉到https://:8080/index.php?r=site/test-response,您將看到我們的Pragma標頭。

Pragma header

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 - 現在,在位址列中鍵入https://:8080/index.php?r=site/test-response,您可以看到以下JSON響應。

JSON response

Yii 透過傳送 Location HTTP 標頭來實現瀏覽器重定向。您可以呼叫yii\web\Response::redirect()方法將使用者瀏覽器重定向到 URL。

步驟 9 - 按此方式修改actionTestResponse函式。

public function actionTestResponse() {
   return $this->redirect('https://tutorialspoint.tw/');
}

現在,如果您訪問https://:8080/index.php?r=site/test-response,您的瀏覽器將被重定向到TutorialsPoint網站。

傳送檔案

Yii 提供以下方法來支援檔案傳送:

  • yii\web\Response::sendFile() - 傳送現有檔案。

  • yii\web\Response::sendStreamAsFile() - 將現有檔案流作為檔案傳送。

  • yii\web\Response::sendContentAsFile() - 將文字字串作為檔案傳送。

按此方式修改 actionTestResponse 函式:

public function actionTestResponse() {
   return \Yii::$app->response->sendFile('favicon.ico');
}

鍵入https://:8080/index.php?r=site/test-response,您將看到favicon.ico檔案的下載對話方塊:

favicon.ico File

在呼叫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 事件。
廣告
© . All rights reserved.