Skip to main content

中介軟體是什麼

中介軟體是檢查、過濾進入應用程式的 HTTP 請求的機制。 可在請求傳到控制器前後插入處理。 例如 Laravel 內建的認證中介軟體: 若使用者未認證則導向登入畫面;若已認證則將請求傳到應用程式內部。 除了認證,也可為日誌記錄、CSRF 保護、速率限制等各種用途建立中介軟體。Laravel 13 的 CSRF 保護詳細請參閱 CSRF 保護
使用者定義的中介軟體通常放在 app/Http/Middleware 目錄。

內建中介軟體

Laravel 預設提供 webapi 兩個中介軟體群組。 routes/web.php 會自動套用 web 群組,routes/api.php 會自動套用 api 群組。 此外,常用中介軟體有預設別名,可以用簡短名稱參照。

建立中介軟體

make:middleware Artisan 指令建立新的中介軟體。
會產生 app/Http/Middleware/EnsureTokenIsValid.php。 在 handle 方法中撰寫處理請求的邏輯。
呼叫 $next($request) 會把請求傳給後續處理。 若不符條件則以 redirect 或回應中止請求。

請求前後的處理

中介軟體可在請求的執行處理。

註冊中介軟體

全域中介軟體

若要對所有請求執行中介軟體,可在 bootstrap/app.phpwithMiddleware 中將它加入全域堆疊。
append 會加到堆疊末端。若要加到最前面請用 prepend

套用中介軟體到路由

若要只對特定路由套用中介軟體,可在路由定義呼叫 middleware 方法。
要套用多個中介軟體時傳入陣列:
若要排除某條路由的中介軟體,可用 withoutMiddleware

中介軟體別名

可為冗長的類別名稱定義短別名,於 bootstrap/app.php 設定:
以別名套用到路由:

中介軟體群組

將多個中介軟體以一個 key 集合,可讓路由套用更方便。 在 bootstrap/app.phpappendToGroupprependToGroup
群組可以像一般中介軟體那樣套用到路由:
若要加入既有的 webapi 群組,可使用專用方法:

中介軟體參數

中介軟體可接收額外參數。 於 handle 方法的 $next 之後加上參數即可。
在路由定義中,以 : 分隔中介軟體名稱與參數:
多個參數以逗號分隔:

實例:認證檢查中介軟體

簡單的把未登入使用者導向登入頁的範例:
套用到路由:
Laravel 內建了認證用的 auth 中介軟體。在自行實作前,先確認既有中介軟體是否已能滿足需求。

下一步

HTTP 請求

學習如何在控制器中取得請求資料。
最後修改於 2026年8月2日