iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Modern Web

Laravel 30天速成筆記系列 第 14

【Day14】Laravel Middleware 與請求攔截

  • 分享至 

  • xImage
  •  

昨天我們學了驗證(Validation),確保資料的正確性!
今天,我們來看Middleware —— 它是Laravel 的「請求守門員」~


Middleware 是什麼?

想像有一個保全站在大樓門口:

  • 有通行證的人可以進入
  • 沒有通行證的人會被攔下
  • 有些人要被帶去做額外檢查

在 Laravel 中,Middleware 就是這個保全:

  • 請求進來前 先檢查是否符合條件
  • 請求處理後 也能在回應送出前加工

Middleware 的用途

  • 權限檢查(例如:必須登入才能看某頁)
  • 資料過濾(例如:只允許 HTTPS 請求)
  • 記錄日誌(例如:紀錄誰訪問了網站)
  • 維護模式(例如:暫時關閉網站)

Laravel 內建 Middleware

app/Http/Kernel.php 可以看到一些內建的:

  • auth → 驗證使用者是否登入
  • guest → 只有未登入的訪客才能訪問
  • verified → 確認 Email 已驗證
  • throttle → 限制請求頻率(防止暴力攻擊)

建立自己的 Middleware

假設我們要做一個「必須是管理員才能進入」的 Middleware:

php artisan make:middleware CheckAdmin

這時會生成 app/Http/Middleware/CheckAdmin.php

public function handle($request, Closure $next)
{
    if (auth()->user()?->role !== 'admin') {
        return redirect('/')->with('error', '你沒有管理員權限!');
    }

    return $next($request); // 放行
}

註冊 Middleware

app/Http/Kernel.php$routeMiddleware 裡加入:

'admin' => \App\Http\Middleware\CheckAdmin::class,

在路由中使用 Middleware

Route::get('/admin', function () {
    return '這是管理員後台';
})->middleware('admin');

群組 Middleware

你可以把多個 Middleware 放在一組:

Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('/admin', function () {
        return '管理員後台';
    });
    Route::get('/admin/settings', function () {
        return '後台設定';
    });
});

Middleware 的執行順序

  • 全域 Middleware($middleware)→ 所有請求都會跑
  • 路由 Middleware($routeMiddleware)→ 只跑綁定的路由
  • 群組 Middleware($middlewareGroups)→ 一次套用多個

小結

  • Middleware = 請求守門員
  • 可用於 登入檢查、權限驗證、資料過濾
  • php artisan make:middleware 建立自訂 Middleware
  • Kernel.php 註冊後,透過 ->middleware() 使用

💡 提示:Middleware 與驗證(Validation)不同

  • 驗證 → 是檢查「資料」
  • Middleware → 則是檢查「請求是否能進來」

上一篇
【Day13】Laravel 驗證(Validation)
下一篇
【Day 15】Laravel API 入門與 Resource
系列文
Laravel 30天速成筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言