CodeIgniter 4 對輸入和輸出的處理方式作了一個較大的改變。在上一個版本中,包括最新的 V3 版,輸入和輸出分別是用兩個包含相關函數的類來處理的。這樣的處理方式背後雖然沒有什麼高深的技術,但卻能簡單直接的實現功能。在 V4 版中,咱們將更加模塊化 HTTP 層,並構建全新的類結構來同時處理 HTTP 的請求和響應。php
在開發 Web 應用時(不一樣於 CLI 程序),你只需關心兩個類:IncomingRequest
和 Response
。json
IncomingRequest 類包含了 HTTP 請求和該請求附帶的數據,包括:瀏覽器
GET、POST、SERVER 和 ENV 等環境變量緩存
HTTP 請求頭服務器
Cookie架構
當前請求的 URL 對象app
上傳的文件框架
而且還包括常見的請求信息好比:模塊化
客戶端的 IP 地址函數
是否爲 Ajax 請求
是否爲 CLI 請求
是否爲 HTTPS
若是你對 IncomingRequest 這個類名感到奇怪,或者說 IncomingRequest 是否是能夠簡單的稱爲 Request?答案是否認的,由於已經有另外一個包含 GET 和 POST 等變量的更爲通用的 Request 類,但這個類不包括詳細的 HTTP 請求信息。一個請求一般只作兩件事:一個是瀏覽器客戶端發送請求到服務器(連入),或者是當前服務器發送請求到外部服務器(連出)。
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 的將來,讓你們意識到改變並不可怕。:) 將來將敲定框架更多的細節,直到造成一個相對穩定的架構,而且會撰寫更多的文章來說述這些內容。