摘要:在版中,我們將更加模塊化層,并構(gòu)建全新的類結(jié)構(gòu)來(lái)同時(shí)處理的請(qǐng)求和響應(yīng)。類類用于把程序的執(zhí)行結(jié)果返回給客戶端。類會(huì)捕獲控制器的輸出,并自動(dòng)設(shè)置為響應(yīng)的主體。在需要的時(shí)候,框架為你提供了精確控制響應(yīng)的能力。
CodeIgniter 4 對(duì)輸入和輸出的處理方式做了一個(gè)較大的改變。在上一個(gè)版本中,包括最新的 V3 版,輸入和輸出分別是用兩個(gè)包含相關(guān)函數(shù)的類來(lái)處理的。這樣的處理方式背后雖然沒(méi)有什么高深的技術(shù),但卻能簡(jiǎn)單直接的實(shí)現(xiàn)功能。在 V4 版中,我們將更加模塊化 HTTP 層,并構(gòu)建全新的類結(jié)構(gòu)來(lái)同時(shí)處理 HTTP 的請(qǐng)求和響應(yīng)。
概覽在開(kāi)發(fā) Web 應(yīng)用時(shí)(不同于 CLI 程序),你只需關(guān)心兩個(gè)類:IncomingRequest 和 Response。
IncomingRequest 類IncomingRequest 類包含了 HTTP 請(qǐng)求和該請(qǐng)求附帶的數(shù)據(jù),包括:
GET、POST、SERVER 和 ENV 等環(huán)境變量
HTTP 請(qǐng)求頭
Cookie
當(dāng)前請(qǐng)求的 URL 對(duì)象
上傳的文件
并且還包括常見(jiàn)的請(qǐng)求信息比如:
客戶端的 IP 地址
是否為 Ajax 請(qǐng)求
是否為 CLI 請(qǐng)求
是否為 HTTPS
如果你對(duì) IncomingRequest 這個(gè)類名感到奇怪,或者說(shuō) IncomingRequest 是不是可以簡(jiǎn)單的稱為 Request?答案是否定的,因?yàn)橐呀?jīng)有另一個(gè)包含 GET 和 POST 等變量的更為通用的 Request 類,但這個(gè)類不包括詳細(xì)的 HTTP 請(qǐng)求信息。一個(gè)請(qǐng)求通常只做兩件事:一個(gè)是瀏覽器客戶端發(fā)送請(qǐng)求到服務(wù)器(連入),或者是當(dāng)前服務(wù)器發(fā)送請(qǐng)求到外部服務(wù)器(連出)。
Response 類Response 類用于把程序的執(zhí)行結(jié)果返回給客戶端。你可以設(shè)置 HTTP 響應(yīng)頭,或直接發(fā)送內(nèi)容到客戶端,等等。Response 類提供了一些便捷方法比如:
設(shè)置適當(dāng)?shù)?no-cache 頭信息
處理 HTTP 緩存頭信息
重定向頁(yè)面
一個(gè)簡(jiǎn)單的例子上面說(shuō)的這些看起來(lái)好像很有科技含量,但其實(shí)很簡(jiǎn)單。這些類的實(shí)例已作為屬性放到每個(gè)控制器中,如果你覺(jué)得很麻煩,則無(wú)需直接使用這些屬性。Response 類會(huì)捕獲控制器的輸出,并自動(dòng)設(shè)置為響應(yīng)的主體。一個(gè)簡(jiǎn)單的 Hello World 看起來(lái)像這樣:
class Home extends CodeIgniterController { public function index() { echo "Hello World!"; } }
易如反掌。
在需要的時(shí)候,框架為你提供了精確控制響應(yīng)的能力。你可以創(chuàng)建復(fù)雜的 HTTP 緩存策略,并與 IncomingRequest 類一起通過(guò)內(nèi)容協(xié)商定制響應(yīng)內(nèi)容。
下面是一個(gè)稍微復(fù)雜一點(diǎn)的例子,你會(huì)發(fā)現(xiàn)代碼很容易看明白,并且處理的很簡(jiǎn)單。
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)); } }
在這個(gè)例子中,我們主要做了三件事。首先,通過(guò)將當(dāng)前 URL 重定向到 HTTPS URL,并設(shè)置一個(gè) Strict-Transport-Security 響應(yīng)頭(這種方式已被很多主流瀏覽器所支持,在發(fā)送請(qǐng)求前通過(guò)瀏覽器自動(dòng)將 HTTP 請(qǐng)求轉(zhuǎn)換成 HTTPS 請(qǐng)求),來(lái)強(qiáng)制這個(gè)頁(yè)面以 HTTPS 的方式訪問(wèn);然后,我們通過(guò)設(shè)置一些 HTTP 緩存規(guī)則來(lái)幫助瀏覽器正確處理緩存,這意味著能減少 HTTP 請(qǐng)求量,減輕服務(wù)器負(fù)擔(dān),提高性能;最后,我們輸出 JSON 數(shù)據(jù)給用戶,并確保內(nèi)容類型是正確的。
希望這篇文章能有助于大家粗略的了解 CodeIgniter 的未來(lái),讓大家意識(shí)到改變并不可怕。:) 未來(lái)將敲定框架更多的細(xì)節(jié),直到形成一個(gè)相對(duì)穩(wěn)定的架構(gòu),并且會(huì)撰寫(xiě)更多的文章來(lái)講述這些內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/21485.html
摘要:然而事實(shí)上服務(wù)器可以幫我們處理某些形式的內(nèi)容協(xié)商,我們通常不太善于利用這一點(diǎn),但并不意味著服務(wù)器不能處理這些信息。但如果你想用,那在中使用內(nèi)容協(xié)商也是很容易的。 當(dāng)我關(guān)注到 HTTP 層的時(shí)候,發(fā)現(xiàn)很多 CIer 對(duì)內(nèi)容協(xié)商還不是很了解,下面我們一起來(lái)探討一下什么是內(nèi)容協(xié)商,以及如何在即將到來(lái)的 CodeIgniter 4 中使用他。 什么是內(nèi)容協(xié)商? 簡(jiǎn)而言之,內(nèi)容協(xié)商是指客戶端和服...
摘要:行,是否強(qiáng)制訪問(wèn)。行,嘗試處理此次請(qǐng)求,詳細(xì)見(jiàn)方法。至此,的執(zhí)行主流程完畢。小結(jié)是的核心文件,它被調(diào)用后,完成了諸多的主流程操作。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 Codeigniter.php 是 CI 4 的核心所在,在這里接收并處理了 request 請(qǐng)求,安全檢查,緩存處理, URL 解析以及路由匹配,執(zhí)行過(guò)濾器,加載運(yùn)行 Controll...
摘要:核心變化從第一版發(fā)布以來(lái),社區(qū)發(fā)生了巨大變化。這意味著系統(tǒng)必須全部重寫(xiě)。暫時(shí)不會(huì)為一個(gè)即將停止支持的版本發(fā)布新版本。路由路由功能將被更新。改進(jìn)的日志系統(tǒng)日志系統(tǒng)將被改進(jìn),但具體細(xì)節(jié)尚未確定。第一階段第一階段將側(cè)重于抓住框架最重要的部分。 我們綜合考慮了社區(qū)的愿望和意見(jiàn)后,也對(duì)什么樣的未來(lái)對(duì) CI 是最合適的做了一些思考,然后,CI 理事會(huì)對(duì)框架的未來(lái)做出了一些決策。預(yù)告一下,未來(lái)將會(huì)有...
摘要:行,判斷如果為空,那么返回默認(rèn)路由。行,把處理完畢后找到的返回。方法該方法是自動(dòng)按著約定規(guī)則去目錄去找路由的過(guò)程。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 我個(gè)人覺(jué)得在當(dāng)前 MVC 流行的架構(gòu)下,要想去了解一個(gè)框架,或者是一個(gè)基于此架構(gòu)下的應(yīng)用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個(gè),但是知道了路由的來(lái)龍去脈就知道了整個(gè)框架或者...
閱讀 2256·2023-04-26 00:00
閱讀 3456·2021-09-24 10:37
閱讀 3625·2021-09-07 09:58
閱讀 1587·2019-08-30 15:56
閱讀 2275·2019-08-30 13:11
閱讀 2368·2019-08-29 16:38
閱讀 1059·2019-08-29 12:58
閱讀 1985·2019-08-27 10:54