上圖列出了 Laravel HTTP 層的相關(guān)知識(shí)大綱。由于目前自己的工作中網(wǎng)頁(yè)、App、小程序等都采用前后臺(tái)分離的方式實(shí)現(xiàn),前端頁(yè)面通過(guò)接口從后端獲取數(shù)據(jù)并自己渲染,因此大綱中的 Session、視圖、CSRF 保護(hù)幾個(gè)部分將不做整理。又限于 HTTP 層的內(nèi)容太多,我在這篇中將整理路由、中間件、控制器 3 部分內(nèi)容。在下一期里,再整理 HTTP 請(qǐng)求、響應(yīng)及表單驗(yàn)證部分的內(nèi)容。
0x00 路由
基本路由
構(gòu)建最基本的路由只需要一個(gè) URI 和一個(gè)閉包。所有的 Laravel 路由都在 routes 目錄中的路由文件中定義。Laravel 默認(rèn)提供 web.php 和 api.php 兩個(gè)路由文件。前者定義 web 頁(yè)面路由,默認(rèn)應(yīng)用 web 中間件組;后者定義無(wú)狀態(tài)路由,會(huì)應(yīng)用 api 中間件組。
Laravel 的 Route Facade 提供了 get
, post
, put
, patch
, delete
, options
, match
, any
等路由方法來(lái)支持響應(yīng)單個(gè)、多個(gè)、所有的 HTTP 方法。
路由參數(shù)
Laravel 可以通過(guò)多種方式對(duì)路由參數(shù)的必選、可選及具體格式進(jìn)行約束。
命名路由
Laravel 可以為指定路由或者控制器方法命名,也可以為已命名的路由生成 URL。
路由組
Laravel 的路由組允許共享路由屬性,常用的路由組包括中間件、命名空間、子域名路由和路由前綴。
路由模型綁定
Laravel 路由模型綁定提供了一個(gè)方便的方法自動(dòng)將模型注入到路由中,可以隱式綁定,也可以顯式綁定。
隱式綁定時(shí),默認(rèn)綁定 Eloquent 模型的 ID 字段。通過(guò)模型的 getRouteKeyName 方法可以自定義綁定鍵名。
顯式綁定則是使用路由的 model 方法來(lái)為已有參數(shù)聲明 class 。
0x01 路由中間件
Laravel 中間件提供了一種方便的機(jī)制來(lái)過(guò)濾進(jìn)入應(yīng)用的 HTTP 請(qǐng)求。可以將中間件想象為一系列的「層」,HTTP 請(qǐng)求必須經(jīng)過(guò)它們才會(huì)觸發(fā)您的應(yīng)用程序。每一層都可以檢測(cè)接收的請(qǐng)求,甚至可以完全拒絕請(qǐng)求訪問(wèn)您的應(yīng)用。
常見(jiàn)的中間件實(shí)例包括身份驗(yàn)證中間件、日志中間件、 CSRF 中間件等。多個(gè)單獨(dú)的中間件還可以定義為中間件組。Laravel 帶有開(kāi)箱即用的 web 和 api 中間件組。
0x02 控制器
控制器能夠?qū)⑾嚓P(guān)的請(qǐng)求處理邏輯組成一個(gè)單獨(dú)的類(lèi)。是在路由文件中以閉包的形式定義所有的請(qǐng)求處理邏輯之外的另一種形式。
資源控制器
Laravel 資源路由可以將典型的 CRUD 路由指定到一個(gè)控制器上,僅僅需要一行代碼就可以實(shí)現(xiàn),這大大提高了后臺(tái)業(yè)務(wù)的開(kāi)發(fā)效率。
以相片控制器為例,兩個(gè)步驟可以定義好處理所有應(yīng)用保存的相片 HTTP 請(qǐng)求的業(yè)務(wù)。
- 通過(guò)一行命令創(chuàng)建一個(gè)控制器
- 為這個(gè)控制器注冊(cè)一個(gè)資源路由
資源路由的聲明會(huì)創(chuàng)建的多個(gè)路由來(lái)處理各種各樣的資源操作,這些操作都包含在控制器中了。
除了提供默認(rèn)的操作外,可以根據(jù)需要對(duì)操作進(jìn)行自定義。
- 可以只定義部分資源路由
- 可以重寫(xiě)默認(rèn)的資源路由名稱(chēng)
- 可以重寫(xiě)資源路由的默認(rèn)參數(shù)名稱(chēng)
- 可以實(shí)現(xiàn)資源 URI 的語(yǔ)言本地化
- 可以附加其他需要的資源控制器
依賴(lài)注入與控制器
Laravel 使用服務(wù)容器來(lái)解析所有的控制器。可以在控制器的構(gòu)造方法中對(duì)任何依賴(lài)使用類(lèi)型約束,也可以在控制器方法中使用依賴(lài)類(lèi)型約束。
下一步
在下一期中,我將整理 Laravel HTTP 請(qǐng)求、響應(yīng)及表單驗(yàn)證的相關(guān)知識(shí)。這些是所有網(wǎng)絡(luò)應(yīng)用最重要的部分。
思維導(dǎo)圖在導(dǎo)出的過(guò)程中會(huì)變得模糊,如有需要高清的思維導(dǎo)圖源文件,請(qǐng)加微信公眾號(hào):up2048,并回復(fù)“腦圖”來(lái)獲取。
- EOF -