2022-05-09|閱讀時間 ‧ 約 4 分鐘

Laravel Middleware

Middleware(中介層),最常被應用在身分認證,比如我們可能開發了很多api,這些api都需要確認user有登入才能夠存取,這時候就很適合用middleware來處理,所有需要登入才能存取的api,request都先經過這個middleware來驗證,就不需要每個api最前面都要再寫一次一樣的身分驗證邏輯。

建立middleware指令:
$ php artisan make:middleware ${name}
假設建立一個Test middleware:
$ php artisan make:middleware Test
  • 新增的middleware檔案會在app/Http/Middleware路徑中。

註冊Middleware:
在使用middleware之前,必須先註冊,在app/Http/Kernel.php這個路徑下,可以定義middleware的scope。
  1. Global Middleware:
  • 這種用法是把Middleware定義為全域的,也就是所有的http request都會先經過這個Test Middleware。

2. Route Middleware
  • 這種用法是Route Middleware,在routes中必須指定要使用什麼middleware,用法範例如下圖:
  • route group用法如下:
  • 也就是這個api url: http://xxx/api/article,都會執行test middleware。

3. Group Middleware
  • 假設再新增一個Test2 middleware,可以在$middlewareGroups中新增一個群組middleware,這邊把Test, Test2這兩個middleware組合成test。 這邊需特別注意,group中的middleware順序是有差的,會依序執行。
  • 在routes中使用這個group middleware的用法,跟上述的Route Middleware中講的一樣,這邊只是把多個middleware group成一個。
  • 如下圖,三個紅色區塊中的middleware寫法,意思是一樣的,都會執行test這個middleware:

事實上Middleware還有分先執行還是後執行的,就只差在middleware的寫法,如下,這種寫法是會先執行middleware,再把request往後丟。
下面這種寫法則是先把request往後丟執行,之後才執行middleware中的邏輯。
簡單來說,假設為某個route api新增一個route middleware,第一種寫法會先執行middleware邏輯,後面才執行route後續的邏輯,第二種寫法則是會先執行route再執行middleware邏輯。

Middleware如何傳參:
若有傳參數的需求,用法如下:
${middleware_name}:${param1},${param2}
  • 冒號前是中介層名稱,冒號後是參數,多個參數by逗號分隔。
  • 如上範例,$param1=abc,$param2=123。
本筆記參考:
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.