當前位置:
首頁 > 最新 > 細讀Yii2的Response

細讀Yii2的Response

細讀Yii2的Response

一個完整的網路請求,最後都需要一個符合協議的返回。Yii2在處理web請求之後,統一通過web/Response處理返回。錯誤也會經過錯誤處理返回一個Response。

一個Response完整的流程有哪些?

創建Response對象,設置Resonse響應格式json,html,xml等

觸發前置事件,暴露操給開發者在輸出前對數據進行調整等

數據格式化。將所有response的內容更加輸出格式轉換成響應的字元串,並確定http返回碼。

設置響應頭。輸出所有自定會返回頭和標註http協議返回頭。

輸出內容。將字元串內容輸出,並刷新緩衝區

觸發後置事件。觸發Response後置操作

數據清理

Yii2的Response

http狀態碼明確。在web/Response 文件中定義了狀態碼數組,幾乎涵蓋了所有的http狀態碼,並給出了標註的狀態碼文字說明。如果想了解http狀態碼,看Yii2的Response文件就足夠了。

支持多種方式文件輸出。sendFile 下載文件,sendContentAsFile將內容以文件的方式發送給客戶端,xSendFile文件下載。

發送文件每次最多讀取8M數據,防止佔用過大內存

數據格式,支持多種數據格式html,json,xml並可以指定ResponseFormatter對數據格式進行擴展

Cookie處理,Yii2的請求Cooke由Request處理,但是響應Cookie由Response處理。這個相對於Thinkphp5 以及其他框架而言不一樣。但是這種分工明確的設計卻又很清晰明了。

總的而言,Yii2的Response 代碼邏輯結構相當清晰,而且輸出內容都非常規範的遵循http協議規範。同時提供前置事件,數據準備前置事件,後置事件給開發者在不同的情況下處理額外的數據。代碼在閱讀起來非常明了。從頭到尾,完整的看一遍,就可以完全理解。以下是Response中的兩段代碼。

輸出內容代碼

沒有什麼特殊的。如果是簡單的字元串,直接echo。主要看它處理stream的情況。

首先設置超時時間。對於讀取文件流,沒辦法確定文件讀取需要的時間,因此設置超時時間很必要。

設置最大讀取長度。每個請求都需要佔用一定的內存去處理數據。為了避免我限制申請內存造成php程序報內存不足,因此對於文件讀取程序,必須設置讀取限制。讀取完及時刷新出去。

下載文件請求頭設置

想要輸出一個下載文件的響應,Yii2的輸出請求頭中有以下內容:

非必須

非必須

非必須

必須

必須

必須

必須

設置完請求頭之後就可以把內容輸出。瀏覽器就會彈出一個下載提示框。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 早起敲代碼 的精彩文章:

TAG:早起敲代碼 |