Laravel思維導(dǎo)圖之Laravel HTTP路由、中間件、控制器

Laravel HTTP層

上圖列出了 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)行約束。

路由參數(shù)

命名路由

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ù)。

  1. 通過(guò)一行命令創(chuàng)建一個(gè)控制器
  2. 為這個(gè)控制器注冊(cè)一個(gè)資源路由

資源路由的聲明會(huì)創(chuàng)建的多個(gè)路由來(lái)處理各種各樣的資源操作,這些操作都包含在控制器中了。

資源控制器操作處理

除了提供默認(rèn)的操作外,可以根據(jù)需要對(duì)操作進(jìn)行自定義。

  1. 可以只定義部分資源路由
  2. 可以重寫(xiě)默認(rèn)的資源路由名稱(chēng)
  3. 可以重寫(xiě)資源路由的默認(rèn)參數(shù)名稱(chēng)
  4. 可以實(shí)現(xiàn)資源 URI 的語(yǔ)言本地化
  5. 可以附加其他需要的資源控制器
資源控制器

依賴(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 -

推薦閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,924評(píng)論 18 139
  • 介紹 不要把所有處理請(qǐng)求的邏輯都放到一個(gè)單獨(dú)的 routes.php 文件里,我們可以使用控制器去組織這些行為。C...
    伊Summer閱讀 825評(píng)論 0 1
  • 路由 路由(routing)就是通過(guò)互聯(lián)的網(wǎng)絡(luò)把信息從源地址傳輸?shù)侥康牡刂返幕顒?dòng)。路由發(fā)生在OSI網(wǎng)絡(luò)參考模型中的...
    Dearmadman閱讀 2,874評(píng)論 2 9
  • 0.1配置1.模板繼承2.控制器3.git4.支付寶支付的流程5.路由6.中間件7.請(qǐng)求8.laravel 學(xué)習(xí)筆...
    云龍789閱讀 841評(píng)論 0 5
  • 今天我來(lái)分享 Laravel 中 HTTP 層關(guān)于請(qǐng)求、響應(yīng)與表單驗(yàn)證的知識(shí)。 0x00 HTTP 請(qǐng)求 獲取請(qǐng)求...
    胖福哥閱讀 1,389評(píng)論 1 20