Tìm Hiểu Về Middleware Trong Laravel
Dù đã một thời gian dài không mã hóa, nhưng càng về sau, mình vẫn cảm thấy hứng thú với lập trình. Hôm nay, mình quyết định viết một bài viết ngắn về middleware trong Laravel, vì có một bạn đã hỏi về nó. Chúng ta sẽ cùng nhau khám phá sâu hơn về khái niệm này nhé.
Middleware Là Gì?
Middleware là những đoạn mã logic nằm giữa yêu cầu (request) từ người dùng và xử lý ở phía máy chủ. Đây thường là các đoạn mã nhỏ, lặp lại nhiều lần, được sử dụng thường xuyên trong quá trình xác thực người dùng (authentication). Các middleware giúp chúng ta kiểm soát quá trình xử lý yêu cầu một cách hiệu quả hơn.
Middleware Trong Laravel
Trong Laravel, các middleware được lưu trữ trong thư mục App/Http/Middleware
. Khi khởi tạo một dự án mới, Laravel sẽ tạo sẵn một số middleware cho bạn. Nếu bạn muốn tạo một middleware riêng, hãy sử dụng lệnh: php artisan make:middleware <tên_middleware>.
Việc viết middleware chi tiết hơn sẽ được mình đề cập trong một bài viết khác, vì bài viết này sẽ ngắn gọn hơn.
Kernel
Kernel là một file đặc biệt trong Laravel, đóng vai trò quan trọng trong việc khai báo các loại middleware mà bạn đã tạo ở phần trên. Trong Kernel, có ba biến chính mà bạn cần nhớ:
- middleware: nơi lưu trữ các middleware sẽ được chạy cho tất cả các yêu cầu.
- middlewareGroups: nơi lưu trữ các middleware được nhóm lại thành các nhóm, bạn có thể sử dụng một nhóm middleware bằng cách gọi tên tại vị trí này.
- routeMiddleware: nơi khai báo các middleware cho từng route, mỗi middleware sẽ có một tên riêng, và có thể kết hợp lại với nhau (tương tự như middlewareGroup).
Sau khi đã tạo các middleware và gán tên cho chúng trong Kernel, bạn có thể sử dụng chúng trong thư mục routes.
Cách Khai Báo Route với Middleware
Tại thư mục routes
, mỗi đường dẫn sẽ dẫn tới một action cụ thể như GET/POST/PUT/DELETE. Bạn có thể khai báo như sau:
php
Route::post('/account/login', [AccountController::class, 'login']);
Khi muốn một đường dẫn thực hiện qua middleware, bạn cần đưa đoạn khai báo route vào trong hàm của middleware:
php
Route::group(['middleware' => ['api']], function () {
Route::post('/account/logout', [AccountController::class, 'logout']);
});
Ở đây, hàm Route
đã được bọc trong một hàm có tên là group()
. Trong hàm group, bạn khai báo tên middleware mong muốn sử dụng và chứa các Route tương ứng. Như vậy, khi nhận được yêu cầu POST tới /account/logout
, yêu cầu sẽ đi qua middleware xử lý trước khi tiếp tục tới các hàm Controller được khai báo bên trong.
Sử Dụng Middleware Đơn Lẻ
Nếu bạn muốn sử dụng middleware đơn lẻ, bạn có thể khai báo như sau:
php
Route::post('/account/login', [AccountController::class, 'login'])
->middleware(['first', 'second']);
Lưu ý rằng, mặc dù với tên middleware 'first' và 'second', điều này không đảm bảo rằng chúng sẽ chạy theo thứ tự nhất định. Trong thực tế, các middleware thường thực hiện những nhiệm vụ khác nhau và không phụ thuộc vào nhau. Tuy nhiên, nếu bạn cần kiểm soát thứ tự chạy của các middleware, bạn có thể khai báo trong middlewarePriority
trong Kernel. Bạn có thể tìm hiểu thêm chi tiết tại tài liệu Laravel.
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về middleware trong Laravel. Hãy theo dõi mình để biết thêm nhiều thông tin hữu ích về lập trình!
source: viblo