国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CodeIgniter 4 的請求和響應

zzzmh / 1011人閱讀

摘要:在版中,我們將更加模塊化層,并構建全新的類結構來同時處理的請求和響應。類類用于把程序的執行結果返回給客戶端。類會捕獲控制器的輸出,并自動設置為響應的主體。在需要的時候,框架為你提供了精確控制響應的能力。

CodeIgniter 4 對輸入和輸出的處理方式做了一個較大的改變。在上一個版本中,包括最新的 V3 版,輸入和輸出分別是用兩個包含相關函數的類來處理的。這樣的處理方式背后雖然沒有什么高深的技術,但卻能簡單直接的實現功能。在 V4 版中,我們將更加模塊化 HTTP 層,并構建全新的類結構來同時處理 HTTP 的請求和響應。

概覽

在開發 Web 應用時(不同于 CLI 程序),你只需關心兩個類:IncomingRequestResponse

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

相關文章

  • CodeIgniter 4 內容協商

    摘要:然而事實上服務器可以幫我們處理某些形式的內容協商,我們通常不太善于利用這一點,但并不意味著服務器不能處理這些信息。但如果你想用,那在中使用內容協商也是很容易的。 當我關注到 HTTP 層的時候,發現很多 CIer 對內容協商還不是很了解,下面我們一起來探討一下什么是內容協商,以及如何在即將到來的 CodeIgniter 4 中使用他。 什么是內容協商? 簡而言之,內容協商是指客戶端和服...

    CarlBenjamin 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之三——核心文件 Codeigniter.ph

    摘要:行,是否強制訪問。行,嘗試處理此次請求,詳細見方法。至此,的執行主流程完畢。小結是的核心文件,它被調用后,完成了諸多的主流程操作。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 Codeigniter.php 是 CI 4 的核心所在,在這里接收并處理了 request 請求,安全檢查,緩存處理, URL 解析以及路由匹配,執行過濾器,加載運行 Controll...

    alighters 評論0 收藏0
  • CodeIgniter 4 建議路線圖

    摘要:核心變化從第一版發布以來,社區發生了巨大變化。這意味著系統必須全部重寫。暫時不會為一個即將停止支持的版本發布新版本。路由路由功能將被更新。改進的日志系統日志系統將被改進,但具體細節尚未確定。第一階段第一階段將側重于抓住框架最重要的部分。 我們綜合考慮了社區的愿望和意見后,也對什么樣的未來對 CI 是最合適的做了一些思考,然后,CI 理事會對框架的未來做出了一些決策。預告一下,未來將會有...

    sean 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之四——詳細路由過程

    摘要:行,判斷如果為空,那么返回默認路由。行,把處理完畢后找到的返回。方法該方法是自動按著約定規則去目錄去找路由的過程。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 我個人覺得在當前 MVC 流行的架構下,要想去了解一個框架,或者是一個基于此架構下的應用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個,但是知道了路由的來龍去脈就知道了整個框架或者...

    NSFish 評論0 收藏0

發表評論

0條評論

zzzmh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<