Yii - Phản hồi
Khi một ứng dụng web xử lý một yêu cầu, nó sẽ tạo một đối tượng phản hồi, chứa tiêu đề HTTP, nội dung và mã trạng thái HTTP. Trong hầu hết các trường hợp, bạn sẽ sử dụng thành phần ứng dụng phản hồi. Theo mặc định, nó là một phiên bản củayii\web\Response.
Để quản lý mã trạng thái HTTP phản hồi, hãy sử dụng yii\web\Response::$statusCodebất động sản. Giá trị mặc định củayii\web\Response::$statusCode là 200.
Step 1 - Thêm một chức năng có tên actionTestResponse đến SiteController.
public function actionTestResponse() {
Yii::$app→response->statusCode = 201;
}
Step 2 - Nếu bạn trỏ trình duyệt web của mình vào http://localhost:8080/index.php?r=site/testresponse, bạn sẽ thấy trạng thái HTTP phản hồi đã tạo 201.
Nếu bạn muốn cho biết rằng yêu cầu không thành công, bạn có thể ném một trong các ngoại lệ HTTP được xác định trước -
yii\web\BadRequestHttpException - mã trạng thái 400.
yii\web\UnauthorizedHttpException - mã trạng thái 401.
yii\web\ForbiddenHttpException - mã trạng thái 403.
yii\web\NotFoundHttpException - mã trạng thái 404.
yii\web\MethodNotAllowedHttpException - mã trạng thái 405.
yii\web\NotAcceptableHttpException - mã trạng thái 406.
yii\web\ConflictHttpException - mã trạng thái 409.
yii\web\GoneHttpException - mã trạng thái 410.
yii\web\UnsupportedMediaTypeHttpException - mã trạng thái 415.
yii\web\TooManyRequestsHttpException - mã trạng thái 429.
yii\web\ServerErrorHttpException - mã trạng thái 500.
Step 3 - Sửa đổi actionTestResponse chức năng như được hiển thị trong đoạn mã sau.
public function actionTestResponse() {
throw new \yii\web\GoneHttpException;
}
Step 4 - Loại http://localhost:8080/index.php?r=site/test-response trong thanh địa chỉ của trình duyệt web, bạn có thể thấy 410 Gone trạng thái HTTP phản hồi như được hiển thị trong hình ảnh sau đây.
Step 5 - Bạn có thể gửi tiêu đề HTTP bằng cách sửa đổi headersthuộc tính của thành phần phản hồi. Để thêm tiêu đề mới vào phản hồi, hãy sửa đổiactionTestResponse chức năng như được cho trong đoạn mã sau.
public function actionTestResponse() {
Yii::$app->response->headers->add('Pragma', 'no-cache');
}
Step 6 - Đi tới http://localhost:8080/index.php?r=site/test-response, bạn sẽ thấy tiêu đề Pragma của chúng tôi.
Yii hỗ trợ các định dạng phản hồi sau:
HTML - được thực hiện bởi yii \ web \ HtmlResponseFormatter.
XML - được thực hiện bởi yii \ web \ XmlResponseFormatter.
JSON - được thực hiện bởi yii \ web \ JsonResponseFormatter.
JSONP - được thực hiện bởi yii \ web \ JsonResponseFormatter.
RAW - phản hồi mà không có bất kỳ định dạng nào.
Step 7 - Để trả lời trong JSON định dạng, sửa đổi actionTestResponse chức năng.
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 - Bây giờ, gõ http://localhost:8080/index.php?r=site/test-response trong thanh địa chỉ, bạn có thể thấy những điều sau JSON phản ứng.
Yii thực hiện chuyển hướng trình duyệt bằng cách gửi tiêu đề HTTP vị trí. Bạn có thể gọiyii\web\Response::redirect() để chuyển hướng trình duyệt của người dùng đến một URL.
Step 9 - Sửa đổi actionTestResponse hoạt động theo cách này.
public function actionTestResponse() {
return $this->redirect('http://www.tutorialspoint.com/');
}
Bây giờ, nếu bạn đi đến http://localhost:8080/index.php?r=site/test-response, trình duyệt của bạn sẽ được chuyển hướng tại TutorialsPoint trang mạng.
Gửi tệp
Yii cung cấp các phương pháp sau để hỗ trợ gửi tệp:
yii\web\Response::sendFile() - Gửi một tập tin hiện có.
yii\web\Response::sendStreamAsFile() - Gửi một dòng tệp hiện có dưới dạng tệp.
yii\web\Response::sendContentAsFile() - Gửi một chuỗi văn bản dưới dạng tệp.
Sửa đổi hàm actionTestResponse theo cách này -
public function actionTestResponse() {
return \Yii::$app->response->sendFile('favicon.ico');
}
Kiểu http://localhost:8080/index.php?r=site/test-response, bạn sẽ thấy một cửa sổ hộp thoại tải xuống cho favicon.ico tập tin -
Phản hồi không được gửi cho đến khi yii\web\Response::send()hàm được gọi. Theo mặc định, phương thức này được gọi ở cuốiyii\base\Application::run()phương pháp. Để gửi phản hồi,yii\web\Response::send() phương pháp làm theo các bước sau:
- Kích hoạt sự kiện yii \ web \ Response :: EVENT_BEFORE_SEND.
- Gọi phương thức yii \ web \ Response :: chuẩn bị ().
- Kích hoạt sự kiện yii \ web \ Response :: EVENT_AFTER_PREPARE.
- Gọi phương thức yii \ web \ Response :: sendHeaders ().
- Gọi phương thức yii \ web \ Response :: sendContent ().
- Kích hoạt sự kiện yii \ web \ Response :: EVENT_AFTER_SEND.