Yii - Antworten
Wenn eine Webanwendung eine Anforderung verarbeitet, generiert sie ein Antwortobjekt, das HTTP-Header, Body und HTTP-Statuscode enthält. In den meisten Fällen verwenden Sie die Antwortanwendungskomponente. Standardmäßig ist es eine Instanz vonyii\web\Response.
Verwenden Sie die, um HTTP-Statuscodes für Antworten zu verwalten yii\web\Response::$statusCodeEigentum. Der Standardwert vonyii\web\Response::$statusCode ist 200.
Step 1 - Fügen Sie eine Funktion mit dem Namen hinzu actionTestResponse zum SiteController.
public function actionTestResponse() {
Yii::$app→response->statusCode = 201;
}
Step 2 - Wenn Sie Ihren Webbrowser auf zeigen http://localhost:8080/index.php?r=site/testresponsesollten Sie den HTTP-Status 201 Erstellte Antwort beachten.

Wenn Sie angeben möchten, dass die Anforderung nicht erfolgreich ist, können Sie eine der vordefinierten HTTP-Ausnahmen auslösen.
yii\web\BadRequestHttpException - Statuscode 400.
yii\web\UnauthorizedHttpException - Statuscode 401.
yii\web\ForbiddenHttpException - Statuscode 403.
yii\web\NotFoundHttpException - Statuscode 404.
yii\web\MethodNotAllowedHttpException - Statuscode 405.
yii\web\NotAcceptableHttpException - Statuscode 406.
yii\web\ConflictHttpException - Statuscode 409.
yii\web\GoneHttpException - Statuscode 410.
yii\web\UnsupportedMediaTypeHttpException - Statuscode 415.
yii\web\TooManyRequestsHttpException - Statuscode 429.
yii\web\ServerErrorHttpException - Statuscode 500.
Step 3 - Ändern Sie die actionTestResponse Funktion wie im folgenden Code gezeigt.
public function actionTestResponse() {
throw new \yii\web\GoneHttpException;
}
Step 4 - Typ http://localhost:8080/index.php?r=site/test-response In der Adressleiste des Webbrowsers sehen Sie die 410 Gone Antwort-HTTP-Status wie in der folgenden Abbildung dargestellt.

Step 5 - Sie können HTTP-Header senden, indem Sie die ändern headersEigenschaft der Antwortkomponente. Ändern Sie die Option, um einer Antwort einen neuen Header hinzuzufügenactionTestResponse Funktion wie im folgenden Code angegeben.
public function actionTestResponse() {
Yii::$app->response->headers->add('Pragma', 'no-cache');
}
Step 6 - Geh zu http://localhost:8080/index.php?r=site/test-response, Sie sehen unseren Pragma-Header.

Yii unterstützt die folgenden Antwortformate:
HTML - implementiert von yii \ web \ HtmlResponseFormatter.
XML - implementiert von yii \ web \ XmlResponseFormatter.
JSON - implementiert von yii \ web \ JsonResponseFormatter.
JSONP - implementiert von yii \ web \ JsonResponseFormatter.
RAW - die Antwort ohne Formatierung.
Step 7 - Um in der zu antworten JSON Format, ändern Sie die actionTestResponse Funktion.
public function actionTestResponse() {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'id' => '1',
'name' => 'Ivan',
'age' => 24,
'country' => 'Poland',
'city' => 'Warsaw'
];
}
Step 8 - Geben Sie jetzt ein http://localhost:8080/index.php?r=site/test-response In der Adressleiste sehen Sie Folgendes JSON Antwort.

Yii implementiert eine Browserumleitung, indem ein Standort-HTTP-Header gesendet wird. Sie können die anrufenyii\web\Response::redirect() Methode zum Umleiten des Benutzerbrowsers zu einer URL.
Step 9 - Ändern Sie die actionTestResponse funktionieren auf diese Weise.
public function actionTestResponse() {
return $this->redirect('http://www.tutorialspoint.com/');
}
Nun, wenn Sie gehen http://localhost:8080/index.php?r=site/test-response, Ihr Browser wird am umgeleitet TutorialsPoint Webseite.
Dateien senden
Yii bietet die folgenden Methoden zur Unterstützung des Dateisendens:
yii\web\Response::sendFile() - Sendet eine vorhandene Datei.
yii\web\Response::sendStreamAsFile() - Sendet einen vorhandenen Dateistream als Datei.
yii\web\Response::sendContentAsFile() - Sendet eine Textzeichenfolge als Datei.
Ändern Sie die actionTestResponse-Funktion auf diese Weise -
public function actionTestResponse() {
return \Yii::$app->response->sendFile('favicon.ico');
}
Art http://localhost:8080/index.php?r=site/test-response, sehen Sie ein Download-Dialogfenster für die favicon.ico Datei -

Die Antwort wird erst gesendet, wenn die yii\web\Response::send()Funktion wird aufgerufen. Standardmäßig wird diese Methode am Ende des aufgerufenyii\base\Application::run()Methode. Um eine Antwort zu senden, muss dieyii\web\Response::send() Methode folgt diesen Schritten -
- Löst das Ereignis yii \ web \ Response :: EVENT_BEFORE_SEND aus.
- Ruft die Methode yii \ web \ Response :: prepare () auf.
- Löst das Ereignis yii \ web \ Response :: EVENT_AFTER_PREPARE aus.
- Ruft die Methode yii \ web \ Response :: sendHeaders () auf.
- Ruft die Methode yii \ web \ Response :: sendContent () auf.
- Löst das Ereignis yii \ web \ Response :: EVENT_AFTER_SEND aus.