Yii - คำตอบ
เมื่อเว็บแอ็พพลิเคชันจัดการกับคำร้องขอจะสร้างอ็อบเจ็กต์การตอบสนองซึ่งประกอบด้วยส่วนหัว HTTP เนื้อหาและรหัสสถานะ HTTP ในกรณีส่วนใหญ่คุณจะใช้ส่วนประกอบแอปพลิเคชันการตอบกลับ โดยค่าเริ่มต้นจะเป็นอินสแตนซ์ของyii\web\Response.
ในการจัดการรหัสสถานะ HTTP การตอบกลับให้ใช้ไฟล์ yii\web\Response::$statusCodeทรัพย์สิน. ค่าเริ่มต้นของyii\web\Response::$statusCode คือ 200
Step 1 - เพิ่มฟังก์ชั่นชื่อ actionTestResponse ไปที่ SiteController.
public function actionTestResponse() {
Yii::$app→response->statusCode = 201;
}
Step 2 - หากคุณชี้เว็บเบราว์เซอร์ไปที่ http://localhost:8080/index.php?r=site/testresponseคุณควรสังเกตสถานะ HTTP การตอบกลับ 201 ที่สร้างขึ้น
หากคุณต้องการระบุว่าคำขอไม่สำเร็จคุณอาจโยนข้อยกเว้น 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
Step 3 - แก้ไขไฟล์ actionTestResponse ดังแสดงในรหัสต่อไปนี้
public function actionTestResponse() {
throw new \yii\web\GoneHttpException;
}
Step 4 - ประเภท http://localhost:8080/index.php?r=site/test-response ในแถบที่อยู่ของเว็บเบราว์เซอร์คุณจะเห็นไฟล์ 410 Gone ตอบกลับสถานะ HTTP ดังแสดงในภาพต่อไปนี้
Step 5 - คุณสามารถส่งส่วนหัว HTTP โดยแก้ไขไฟล์ headersคุณสมบัติขององค์ประกอบการตอบสนอง หากต้องการเพิ่มส่วนหัวใหม่ในการตอบกลับให้แก้ไขไฟล์actionTestResponse ฟังก์ชันตามที่ระบุในรหัสต่อไปนี้
public function actionTestResponse() {
Yii::$app->response->headers->add('Pragma', 'no-cache');
}
Step 6 - ไปที่ http://localhost:8080/index.php?r=site/test-response, คุณจะเห็นส่วนหัว Pragma ของเรา
Yii รองรับรูปแบบการตอบสนองต่อไปนี้ -
HTML - ดำเนินการโดย yii \ web \ HtmlResponseFormatter
XML - ดำเนินการโดย yii \ web \ XmlResponseFormatter
JSON - ดำเนินการโดย yii \ web \ JsonResponseFormatter
JSONP - ดำเนินการโดย yii \ web \ JsonResponseFormatter
RAW - การตอบสนองโดยไม่มีการจัดรูปแบบใด ๆ
Step 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'
];
}
Step 8 - ตอนนี้พิมพ์ http://localhost:8080/index.php?r=site/test-response ในแถบที่อยู่คุณจะเห็นสิ่งต่อไปนี้ JSON การตอบสนอง
Yii ดำเนินการเปลี่ยนเส้นทางเบราว์เซอร์โดยส่งส่วนหัวตำแหน่ง HTTP คุณสามารถโทรyii\web\Response::redirect() วิธีเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยัง URL
Step 9 - แก้ไขไฟล์ actionTestResponse ทำงานด้วยวิธีนี้
public function actionTestResponse() {
return $this->redirect('http://www.tutorialspoint.com/');
}
ตอนนี้ถ้าคุณไปที่ http://localhost: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');
}
ประเภท 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 :: เตรียม ()
- ทริกเกอร์เหตุการณ์ yii \ web \ Response :: EVENT_AFTER_PREPARE
- เรียกใช้เมธอด yii \ web \ Response :: sendHeaders ()
- เรียกใช้เมธอด yii \ web \ Response :: sendContent ()
- ทริกเกอร์เหตุการณ์ yii \ web \ Response :: EVENT_AFTER_SEND