Yii-responses
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例外のいずれかをスローすることがあります-
- 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に移動すると、プラグマヘッダーが表示されます。
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.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* ファイルのダウンロードダイアログウィンドウが表示されます-
- 応答は、* 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イベントをトリガーします。