Yii-responses

提供:Dev Guides
移動先:案内検索

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 *-Webブラウザで *http://localhost:8080/index.php?r = site/testresponse を指定すると、201 Created response HTTPステータスが表示されます。

作成された応答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ステータスが表示されます。次の画像。

Gone Response 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に移動すると、プラグマヘッダーが表示されます。

プラグマヘッダー

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 応答が表示されます。

JSON応答

YiiはLocation HTTPヘッダーを送信することにより、ブラウザーのリダイレクトを実装します。 * yii \ web \ Response
redirect()*メソッドを呼び出して、ユーザーのブラウザーをURLにリダイレクトできます。

ステップ9 *- *actionTestResponse 関数をこの方法で変更します。

public function actionTestResponse() {
   return $this->redirect('http://www.finddevguides.com/');
}

これで、 http://localhost:8080/index.php?r = site/test-response にアクセスすると、ブラウザーは finddevguides Webサイトにリダイレクトされます。

ファイルを送信する

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 = site/test-response* と入力すると、 *favicon.ico* ファイルのダウンロードダイアログウィンドウが表示されます-

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イベントをトリガーします。