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