Middleware

Middleware trong Laravel là một lớp trung gian, được sử dụng để xử lý các yêu cầu HTTP trước khi chúng được gửi tới controller hoặc sau khi phản hồi được gửi tới người dùng. Middleware có thể được sử dụng để thực hiện nhiều tác vụ như xác thực, kiểm tra quyền truy cập, logging, và nhiều hơn nữa.

Middleware không nằm ở controller, model hay router mà là một thành phần riêng biệt trong ứng dụng Laravel. Dưới đây là chi tiết về vị trí và cách sử dụng middleware trong Laravel:

Vị trí của Middleware

Middleware nằm trong thư mục app/Http/Middleware. Các file middleware được định nghĩa ở đây.

Cách sử dụng Middleware

  1. Tạo Middleware

    Bạn có thể tạo một middleware bằng lệnh artisan:

    php artisan make:middleware CheckAge

    Middleware sẽ được tạo trong thư mục app/Http/Middleware.

    Ví dụ về middleware CheckAge:

    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    
    class CheckAge
    {
        public function handle(Request $request, Closure $next)
        {
            if ($request->age <= 18) {
                return redirect('home');
            }
    
            return $next($request);
        }
    }
  2. Đăng ký Middleware

    Bạn cần đăng ký middleware trong file app/Http/Kernel.php. Middleware có thể được đăng ký toàn cục hoặc cho từng nhóm middleware.

    Middleware toàn cục (áp dụng cho tất cả các yêu cầu):

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

    Middleware theo nhóm:

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\CheckAge::class,
        ],
    ];

    Middleware cho route cụ thể:

    protected $routeMiddleware = [
        'check.age' => \App\Http\Middleware\CheckAge::class,
    ];
  3. Áp dụng Middleware cho Route

    Bạn có thể áp dụng middleware cho các route cụ thể trong file routes/web.php hoặc routes/api.php.

    Middleware cho một route:

    Route::get('profile', function () {
        // Your logic
    })->middleware('check.age');

    Middleware cho một nhóm route:

    Route::group(['middleware' => ['check.age']], function () {
        Route::get('profile', function () {
            // Your logic
        });
    
        Route::get('settings', function () {
            // Your logic
        });
    });

Tổng kết

  • Middleware không nằm trong controller, model, hay router mà là một thành phần độc lập trong hệ thống.

  • Middleware được định nghĩa trong thư mục app/Http/Middleware.

  • Middleware được đăng ký trong file app/Http/Kernel.php.

  • Middleware có thể được áp dụng toàn cục, theo nhóm, hoặc cho các route cụ thể.

Middleware là một phần quan trọng trong Laravel giúp bạn kiểm soát và xử lý các yêu cầu HTTP một cách linh hoạt và mạnh mẽ.

Middleware nằm ở vị trí nào?

Khi client gửi một yêu cầu (request) tới server, middleware trong Laravel nằm ở vị trí trung gian giữa việc nhận request và xử lý request bởi controller. Nó có thể xử lý request trước khi nó tới controller và cũng có thể xử lý response sau khi controller đã xử lý xong request đó. Dưới đây là quy trình tổng quát:

  1. Request từ Client: Client gửi một request tới server Laravel.

  2. Middleware trước khi tới Controller: Middleware xử lý request trước khi nó được chuyển tới controller. Các middleware được áp dụng ở bước này có thể thực hiện các tác vụ như xác thực, kiểm tra quyền truy cập, logging, hoặc sửa đổi request.

  3. Router: Request được router kiểm tra và xác định controller nào sẽ xử lý request này.

  4. Controller: Request được chuyển tới phương thức tương ứng trong controller, nơi mà logic chính để xử lý request được thực hiện.

  5. Middleware sau khi xử lý bởi Controller: Middleware có thể xử lý response sau khi nó được trả về từ controller trước khi gửi lại client. Điều này có thể bao gồm việc chỉnh sửa response, thêm các header, hoặc logging.

  6. Response tới Client: Response cuối cùng được gửi từ server trở lại client.

Quy trình chi tiết:

  1. Client gửi request:

  2. Middleware trước khi tới Controller:

  3. Router:

  4. Controller:

  5. Middleware sau khi xử lý bởi Controller:

  6. Response tới Client:

Last updated