CodeIgniter 4 的請求和響應

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

概覽

在開發 Web 應用時(不一樣於 CLI 程序),你只需關心兩個類:IncomingRequestResponsejson

IncomingRequest 類

IncomingRequest 類包含了 HTTP 請求和該請求附帶的數據,包括:瀏覽器

  • GET、POST、SERVER 和 ENV 等環境變量緩存

  • HTTP 請求頭服務器

  • Cookie架構

  • 當前請求的 URL 對象app

  • 上傳的文件框架

而且還包括常見的請求信息好比:模塊化

  • 客戶端的 IP 地址函數

  • 是否爲 Ajax 請求

  • 是否爲 CLI 請求

  • 是否爲 HTTPS

若是你對 IncomingRequest 這個類名感到奇怪,或者說 IncomingRequest 是否是能夠簡單的稱爲 Request?答案是否認的,由於已經有另外一個包含 GET 和 POST 等變量的更爲通用的 Request 類,但這個類不包括詳細的 HTTP 請求信息。一個請求一般只作兩件事:一個是瀏覽器客戶端發送請求到服務器(連入),或者是當前服務器發送請求到外部服務器(連出)。

Response 類

Response 類用於把程序的執行結果返回給客戶端。你能夠設置 HTTP 響應頭,或直接發送內容到客戶端,等等。Response 類提供了一些便捷方法好比:

  • 設置適當的 no-cache 頭信息

  • 處理 HTTP 緩存頭信息

  • 重定向頁面

一個簡單的例子

上面說的這些看起來好像頗有科技含量,但其實很簡單。這些類的實例已做爲屬性放到每一個控制器中,若是你以爲很麻煩,則無需直接使用這些屬性。Response 類會捕獲控制器的輸出,並自動設置爲響應的主體。一個簡單的 Hello World 看起來像這樣:

class Home extends \CodeIgniter\Controller
{
    public function index()
    {
        echo "Hello World!";
    }
}

易如反掌。

在須要的時候,框架爲你提供了精確控制響應的能力。你能夠建立複雜的 HTTP 緩存策略,並與 IncomingRequest 類一塊兒經過內容協商定製響應內容。

下面是一個稍微複雜一點的例子,你會發現代碼很容易看明白,而且處理的很簡單。

class Home extends \CodeIgniter\Controller
{
    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 的將來,讓你們意識到改變並不可怕。:) 將來將敲定框架更多的細節,直到造成一個相對穩定的架構,而且會撰寫更多的文章來說述這些內容。

相關文章
相關標籤/搜索