data-id="1190000004868315">
CodeIgniter 4 對輸入和輸出的處理方式做了一個較大的改變。在上一個版本中,包括最新的 V3 版,輸入和輸出分別是用兩個包含相關函數的類別來處理的。這樣的處理方式背後雖然沒有高深的技術,但卻能簡單直接的實作功能。在 V4 版中,我們將更模組化 HTTP 層,並建立全新的類別結構來同時處理 HTTP 的請求和回應。
概覽
在開發 Web 應用時(不同於 CLI 程式),你只需關心兩個類別:IncomingRequest
和 Response
。
IncomingRequest 類別
IncomingRequest 類別包含了HTTP 請求和該請求附帶的數據,包括:
GET、POST、SERVER 和ENV 等環境變數
處理 HTTP 快取頭資訊
的頁面範例
上面說的這些看起來好像很有科技含量,但其實很簡單。這些類別的實例已作為屬性放到每個控制器中,如果你覺得很麻煩,則無需直接使用這些屬性。 Response 類別會擷取控制器的輸出,並自動設定為回應的主體。一個簡單的 Hello World 看起來像這樣:
<code>class Home extends \CodeIgniter\Controller { public function index() { echo "Hello World!"; } }</code>
易如反掌。
在需要的時候,框架為你提供了精確控制回應的能力。你可以建立複雜的 HTTP 快取策略,並與 IncomingRequest 類別一起透過內容協商自訂回應內容。
下面是一個稍微複雜一點的例子,你會發現程式碼很容易看明白,而且處理的很簡單。
<code>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)); } }</code>
在這個例子中,我們主要做了三件事。首先,透過將目前URL 重新導向到HTTPS URL,並設定一個Strict-Transport-Security 回應頭(這種方式已被很多主流瀏覽器所支持,在發送請求前透過瀏覽器自動將HTTP 請求轉換成HTTPS 請求),來強制這個頁面以HTTPS 的方式存取;然後,我們透過設定一些HTTP 快取規則來幫助瀏覽器正確處理緩存,這意味著能減少HTTP 請求量,減輕伺服器負擔,提高效能;最後,我們輸出JSON資料給用戶,並確保內容類型是正確的。
希望這篇文章能有助於大家粗略的了解 CodeIgniter 的未來,讓大家意識到改變並不可怕。 :) 未來將敲定框架更多的細節,直到形成一個相對穩定的架構,並且會撰寫更多的文章來講述這些內容。
以上就介紹了CodeIgniter 4 的請求和回應,包括了codeigniter方面的內容,希望對PHP教學有興趣的朋友有幫助。