Học Laravel 10 cơ bản – Bài 7: Middleware trong Laravel 10

Học Laravel 10 cơ bản: Middleware trong Laravel 10

👉 Mục tiêu: Hiểu middleware là gì, cách Laravel xử lý request qua middleware, cách tạo và áp dụng middleware vào route hoặc group.

Middleware trong Laravel 10

1. Middleware là gì?

  • Middleware là “lớp trung gian” đứng giữa RequestResponse.

  • Nó dùng để lọc, kiểm tra hoặc xử lý logic trước khi request đi vào controller.

Ví dụ thực tế:

  • Kiểm tra người dùng đã đăng nhập chưa → middleware auth.

  • Giới hạn IP truy cập.

  • Ghi log tất cả request.


2. Middleware mặc định trong Laravel

Khi cài mới, Laravel đã có sẵn:

  • auth → kiểm tra đăng nhập.

  • guest → chỉ cho khách (chưa login).

  • verified → kiểm tra email đã xác minh.

  • throttle → giới hạn số request.

  • csrf → chống tấn công CSRF.

Xem danh sách middleware: app/Http/Kernel.php

3. Tạo Middleware mới

Chạy lệnh:

php artisan make:middleware CheckAdmin

Laravel tạo file: app/Http/Middleware/CheckAdmin.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckAdmin
{
    public function handle(Request $request, Closure $next): Response
    {
        // Giả sử user có cột role = 'admin'
        if (auth()->check() && auth()->user()->role === 'admin') {
            return $next($request); // Cho đi tiếp
        }

        return redirect('/')->with('error', 'Bạn không có quyền truy cập!');
    }
}

4. Đăng ký Middleware

Trong app/Http/Kernel.php:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'admin' => \App\Http\Middleware\CheckAdmin::class, // thêm dòng này
];


5. Sử dụng Middleware

a. Trong route:

Route::get('/admin/dashboard', function () {
    return "Trang Admin";
})->middleware('admin');

b. Trong group:


Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('/admin/posts', [PostController::class, 'index']);
    Route::get('/admin/users', [UserController::class, 'index']);
});

6. Middleware toàn cục (Global Middleware)

Nếu muốn middleware chạy cho mọi request, thêm vào: app/Http/Kernel.php → $middleware

protected $middleware = [
    \App\Http\Middleware\CheckAdmin::class, 
];

7. Middleware tham số

Có thể truyền tham số:

php artisan make:middleware CheckRole

CheckRole.php

public function handle(Request $request, Closure $next, $role): Response
{
    if (auth()->check() && auth()->user()->role === $role) {
        return $next($request);
    }
    return redirect('/')->with('error', 'Không có quyền!');
}

Đăng ký trong Kernel.php:

'role' => \App\Http\Middleware\CheckRole::class,

Dùng trong route:

Route::get('/admin', function () {
    return "Chào Admin";
})->middleware('role:admin');

Route::get('/editor', function () {
    return "Chào Editor";
})->middleware('role:editor');


✅ Kết quả

  • Hiểu middleware hoạt động như chốt gác trước khi request vào controller.

  • Biết cách tạo, đăng ký, áp dụng cho route/group.

  • Có thể viết middleware tái sử dụng với tham số.