CodeIgniter 4 的內容協商

2021-09-19 08:49:04 字數 1294 閱讀 5500

當我關注到 http 層的時候,發現很多 cier 對內容協商還不是很了解,下面我們一起來**一下什麼是內容協商,以及如何在即將到來的 codeigniter 4 中使用他。

簡而言之,內容協商是指客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。內容協商會以響應資源的語言、型別和編碼方式等作為判斷的基準(包含在請求頭中的某些accept字段就是判斷的基準)。

舉個例子,我用 chrome 訪問 mozilla 的站點,可以看到下面的 http 請求頭資訊:

accept-encoding:gzip, deflate, sdch

accept-language:en-us,en;q=0.8

這些accept資訊告訴我們瀏覽器所支援的格式,並提供這些格式的優先順序資訊(通過 q 的值來確定優先順序)。以上資訊說明瀏覽器在所有支援的內容型別中更希望接收 text/html 型別的內容。由於我的瀏覽器的語言設定是英語,所以accept-language請求頭表示我更喜歡美式英語(en-us)的頁面。

很顯然,即使我們不提供任何內容協商資訊,web 站點還是可以照常執行,並且我們已經這樣做了很多年。然而事實上 web 伺服器可以幫我們處理某些形式的內容協商,我們通常不太善於利用這一點,但並不意味著伺服器不能處理這些資訊。

內容協商有兩個很吸引人的用處,乙個是用於那些支援多國語言的站點,另乙個是用於返回特定格式資料的 api 介面。

是不是必須要使用內容協商呢?可能不一定,他也許是把雙刃劍,有些人提議不要使用他,也有些人認為他就像切片麵包一樣令人喜愛。但如果你想用,那在 codeigniter 中使用內容協商也是很容易的。

這裡我不會對內容協商作過多詳細的介紹(詳細介紹將寫到使用者手冊中),這個例子簡單介紹了內容協商是如何確定輸出語言的。

class basecontroller extends \codeigniter\controller

}

這個例子表示該站點可以支援英語和法語,我們將支援的語言賦值到$supportedlangs陣列裡,預示著預設語言是美式英語,但也支援普通英語和法語,然後簡單呼叫$negotiate->language()方法,傳遞支援的語言型別,解析時就能識別正確的 http 頭,然後按照陣列裡定義的優先順序順序,返回最匹配的結果。如果兩種語言都無法匹配,就會使用陣列中的第乙個語言。

negotiate 類中的 4 個協商方法分別為:

並不是所有場景都用得著內容協商,但他卻是構建高質量 api 的乙個有力工具,並且也能夠創造性的應用於其他地方。

CodeIgniter4 管理多個應用

預設情況下,假定您僅打算使用codeigniter來管理乙個應用程式,該應用程式將在您的應用程式目錄中構建。但是,可以有多個應用程式共享乙個codeigniter安裝,甚至可以重新命名或重定位應用程式目錄。變數設定其名稱,就可以這樣做 可以將應用程式目錄移動到伺服器上與web根目錄不同的位置。為此,...

CodeIgniter4 概述 自動載入檔案

每個應用程式都包含許多位於不同位置的類。該框架提供了用於核心功能的類。您的應用程式將具有許多庫,模型和其他實體,以使其正常執行。您可能有專案正在使用的第三方類。跟蹤每個檔案的位置,然後將該位置硬編碼成一系列檔案,這requires 是一件非常麻煩的事情,而且容易出錯。這就是自動裝帶器的用武之地。co...

CodeIgniter中Router類的兩個方法

file location system core router.php 第乙個 fetch the current method access public return string function fetch method return this method 第二個 fetch the c...