摘要:在版中,我們將更加模塊化層,并構建全新的類結構來同時處理的請求和響應。類類用于把程序的執行結果返回給客戶端。類會捕獲控制器的輸出,并自動設置為響應的主體。在需要的時候,框架為你提供了精確控制響應的能力。
CodeIgniter 4 對輸入和輸出的處理方式做了一個較大的改變。在上一個版本中,包括最新的 V3 版,輸入和輸出分別是用兩個包含相關函數的類來處理的。這樣的處理方式背后雖然沒有什么高深的技術,但卻能簡單直接的實現功能。在 V4 版中,我們將更加模塊化 HTTP 層,并構建全新的類結構來同時處理 HTTP 的請求和響應。
概覽在開發 Web 應用時(不同于 CLI 程序),你只需關心兩個類:IncomingRequest 和 Response。
IncomingRequest 類IncomingRequest 類包含了 HTTP 請求和該請求附帶的數據,包括:
GET、POST、SERVER 和 ENV 等環境變量
HTTP 請求頭
Cookie
當前請求的 URL 對象
上傳的文件
并且還包括常見的請求信息比如:
客戶端的 IP 地址
是否為 Ajax 請求
是否為 CLI 請求
是否為 HTTPS
如果你對 IncomingRequest 這個類名感到奇怪,或者說 IncomingRequest 是不是可以簡單的稱為 Request?答案是否定的,因為已經有另一個包含 GET 和 POST 等變量的更為通用的 Request 類,但這個類不包括詳細的 HTTP 請求信息。一個請求通常只做兩件事:一個是瀏覽器客戶端發送請求到服務器(連入),或者是當前服務器發送請求到外部服務器(連出)。
Response 類Response 類用于把程序的執行結果返回給客戶端。你可以設置 HTTP 響應頭,或直接發送內容到客戶端,等等。Response 類提供了一些便捷方法比如:
設置適當的 no-cache 頭信息
處理 HTTP 緩存頭信息
重定向頁面
一個簡單的例子上面說的這些看起來好像很有科技含量,但其實很簡單。這些類的實例已作為屬性放到每個控制器中,如果你覺得很麻煩,則無需直接使用這些屬性。Response 類會捕獲控制器的輸出,并自動設置為響應的主體。一個簡單的 Hello World 看起來像這樣:
class Home extends CodeIgniterController { public function index() { echo "Hello World!"; } }
易如反掌。
在需要的時候,框架為你提供了精確控制響應的能力。你可以創建復雜的 HTTP 緩存策略,并與 IncomingRequest 類一起通過內容協商定制響應內容。
下面是一個稍微復雜一點的例子,你會發現代碼很容易看明白,并且處理的很簡單。
class Home extends CodeIgniterController { public function __construct(...$params) { parent::__construct(...$params); // This controller is only accessible via HTTPS if (! $this->request->isSecure()) { // Redirect the user to this page via HTTPS, and set the Strict-Transport-Security // header so the browser will automatically convert all links to this page to HTTPS // for the next year. force_https(); } } public function index() { $data = [ ... ]; // Set some HTTP cache rules for this page. $this->response->setCache([ "max-age" => 300, "s-max-age" => 900, "etag" => "foo" ]); // Return JSON $this->response->setContentType("application/json") ->setOutput(json_encode($data)); } }
在這個例子中,我們主要做了三件事。首先,通過將當前 URL 重定向到 HTTPS URL,并設置一個 Strict-Transport-Security 響應頭(這種方式已被很多主流瀏覽器所支持,在發送請求前通過瀏覽器自動將 HTTP 請求轉換成 HTTPS 請求),來強制這個頁面以 HTTPS 的方式訪問;然后,我們通過設置一些 HTTP 緩存規則來幫助瀏覽器正確處理緩存,這意味著能減少 HTTP 請求量,減輕服務器負擔,提高性能;最后,我們輸出 JSON 數據給用戶,并確保內容類型是正確的。
希望這篇文章能有助于大家粗略的了解 CodeIgniter 的未來,讓大家意識到改變并不可怕。:) 未來將敲定框架更多的細節,直到形成一個相對穩定的架構,并且會撰寫更多的文章來講述這些內容。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21485.html
摘要:然而事實上服務器可以幫我們處理某些形式的內容協商,我們通常不太善于利用這一點,但并不意味著服務器不能處理這些信息。但如果你想用,那在中使用內容協商也是很容易的。 當我關注到 HTTP 層的時候,發現很多 CIer 對內容協商還不是很了解,下面我們一起來探討一下什么是內容協商,以及如何在即將到來的 CodeIgniter 4 中使用他。 什么是內容協商? 簡而言之,內容協商是指客戶端和服...
摘要:行,是否強制訪問。行,嘗試處理此次請求,詳細見方法。至此,的執行主流程完畢。小結是的核心文件,它被調用后,完成了諸多的主流程操作。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 Codeigniter.php 是 CI 4 的核心所在,在這里接收并處理了 request 請求,安全檢查,緩存處理, URL 解析以及路由匹配,執行過濾器,加載運行 Controll...
摘要:核心變化從第一版發布以來,社區發生了巨大變化。這意味著系統必須全部重寫。暫時不會為一個即將停止支持的版本發布新版本。路由路由功能將被更新。改進的日志系統日志系統將被改進,但具體細節尚未確定。第一階段第一階段將側重于抓住框架最重要的部分。 我們綜合考慮了社區的愿望和意見后,也對什么樣的未來對 CI 是最合適的做了一些思考,然后,CI 理事會對框架的未來做出了一些決策。預告一下,未來將會有...
摘要:行,判斷如果為空,那么返回默認路由。行,把處理完畢后找到的返回。方法該方法是自動按著約定規則去目錄去找路由的過程。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 我個人覺得在當前 MVC 流行的架構下,要想去了解一個框架,或者是一個基于此架構下的應用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個,但是知道了路由的來龍去脈就知道了整個框架或者...
閱讀 2155·2023-04-26 00:00
閱讀 3255·2021-09-24 10:37
閱讀 3532·2021-09-07 09:58
閱讀 1525·2019-08-30 15:56
閱讀 2221·2019-08-30 13:11
閱讀 2315·2019-08-29 16:38
閱讀 965·2019-08-29 12:58
閱讀 1883·2019-08-27 10:54