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