老司機帶你深入理解 Laravel 中介軟體(全域性中介軟體)

Dennis_Ritchie發表於2019-12-17

前言

不知不覺,這已經是我寫的第16篇博文了,在前面的一系列博文中,我帶大家深入學習了Laravel的各個模組,是為了給大家打下良好的基礎,也是後面學習的必要條件。在今天的學習中,我會給大家講解Laravel的中介軟體(這是Laravel中介軟體的第一篇,全域性中介軟體),關於中介軟體如何使用,相信大家應該都沒啥問題了,我就不再詳述。

學習依賴

你要想看懂我下面所講的內容,請首先閱讀我前面寫的下列博文:

  1. 老司機帶你實現 Laravel 之管道
  2. 老司機帶你深入理解 Laravel 之 Facade

如果你沒看的話,你有很大的可能性,下面的內容你可能根本看不懂。

中介軟體定義

Laravel專案的中介軟體存在於如下所示目錄中:

老司機帶你深入理解Laravel中介軟體

Laravel自帶的中間價都存於vendor/laravel/framework/src/illuminate/Foundation/Http/Middleware目錄下面,如下:

老司機帶你深入理解Laravel中介軟體

至於Laravel如何識別我們的中間價,則看這個檔案,相信大家並不陌生:

老司機帶你深入理解Laravel中介軟體

你一定要開啟app/Http/Middleware/Kernel這個檔案看一下,後面會用到。
我們來到Illuminate\Foundation\Http\Kernel檔案的sendRequestThroughRouter方法,如下:

老司機帶你深入理解Laravel中介軟體

這裡使用到了Laravel的管道,這也是我為什麼提醒閱讀 老司機帶你實現 Laravel 之管道的原因。

這個管道遍歷當前物件的middleware屬性,那麼這個屬性的值是多少呢?請看app/Http/Middleware/Kernel檔案,內容如下:

老司機帶你深入理解Laravel中介軟體

Laravel中每一箇中介軟體都必須實現handle法,因為Laravel會呼叫它,這裡我們以\App\Http\Middleware\CheckForMaintenanceMode::class為例,這個類的定義如下所示:

老司機帶你深入理解Laravel中介軟體

我標出來的紅色部分,它繼承自Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode類,我們看它的handle如下:

老司機帶你深入理解Laravel中介軟體

至於CheckForMaintenanceMode中間價是幹啥的,大家自己去看,我就沒那個興致了,最重要的看我標出來的部分,這是Laravel管道的關鍵所在。

總結

上面給大家稍微梳理了一下Laravel全域性中介軟體的程式碼,相信如果你理解了我之前寫的幾篇Laravel博文,看懂真的很簡單。在下有一個qq群,有意者可以加一下:

如果有不懂的地方,可以加我的qq:1174332406,或者是微信:itshardjs

相關文章