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