Trang chủTác giảLiên hệ

Middleware là gì ? Sơ lược về Middleware

By Cao Văn Thành
Published in PHP
May 18, 2021
2 min read

Xin chào mọi người, lâu lắm rồi mình không lên sóng, nay lên sóng quay lại 1 chút nhân có 1 bạn hỏi về middleware. Chúng ta sẽ cùng xem xét sâu hơn 1 chút về middleware của Laravel.

Middleware là gì ?

Nhắc lại 1 chút, middleware là những đoạn code logic nằm giữa request và logic phía server. Đây thường là những đoạn logic nhỏ, có tính lặp lại thường xuyên, được sử dụng trong quá trình authentication xác thực người dùng logic.

Middleware trong Laravel

Nhìn chung, middleware ở các ngôn ngữ khác nhau sẽ có những thể hiện khác nhau. Tuy nhiên, về tính logic, nó đều thỏa mãn những gì đã nói ở phần định nghĩa.

Trong bài viết này đặc biệt nhắc tới Middleware trong laravel. Middleware tại một số ngôn ngữ khác có thể được viết khác một chút.

Trong Laravel, middleware được viết nằm trong thư mục App/Http/Middleware. Có 1 số middleware đã được tạo sẵn khi các bạn tạo project. Nếu muốn tạo 1 middleware riêng của mình, thì có thể chạy lệnh :

Sau khi chạy lệnh phía trên, trong thư mục “

Cách viết middleware trong laravel

File middleware được khởi tạo sẽ có dạng như sau:

Việc viết hàm/logic diễn ra bình thường, chỉ có điều xuất hiện thêm 1 parameter $next, được dùng để đánh dấu logic của controller. $next sẽ hoạt động như 1 calllback và sẽ gọi để kích hoạt hàm tiếp theo.

Kernel và các loại middleware

Kernel trong Laravel là 1 file đặc biệt, dùng để khai báo các loại middleware các bạn vừa viết ra ở phần trên. Trong Kernel, có 3 biến lưu các loại middleware chúng ta cần nhớ, đó là:

  • middleware: đây là nơi lưu trữ các middleware sẽ được chạy trong tất cả các request.
  • middlewareGroups: đây là nơi lưu trữ các middleware được nhóm lại thành các group, chúng ta có thể sử dụng 1 group các middleware bằng cách gọi tên tại vị trí này.
  • routeMiddleware: đây là nơi khai báo các middleware route lẻ, mỗi middleware sẽ có 1 tên riêng, và có thể kết hợp nhau (tương tự middlewareGroup).

Sau khi đã có middleware và gán tên tương ứng trong Kernel. Chúng ta có thể sử dụng middleware đó tại thư mục routes.

Tại thư mục routes, thông thường, mỗi một đường dẫn link tới 1 action cụ thể như get/post/put/delete/… chúng ta hay viết như sau:

Đối với những đường dẫn mong muốn đi qua middleware, chúng ta sẽ đưa đoạn code khai báo route vào trong hàm của middleware:

Ở đây, chúng ta đang nhìn thấy hàm Route thông thường đã được wrap ở trong 1 hàm tên là : group(). Tại hàm group, chúng ta khai báo tên middleware mong muốn sử dụng theo format trên, và khai báo function chứa các Route khai báo phía trong. Như vậy khi nhận được request POST /account/logout , request sẽ được đi qua middleware xử lý trước, rồi mới tiếp tục đi vào trong các hàm Controller khai báo phía trong. Tất cả các route được viết ở trong hàm group() sẽ phải đi qua middleware trước rồi mới đi tới các hàm bên trong.

Đối với trường hợp muốn sử dụng các middleware lẻ cho 1 route, chúng ta sử dụng như sau:

Lưu ý là dù với tên middleware 'first', 'second', nhưng điều này không đảm bảo là middleware của chúng ta sẽ chạy theo thứ tự (Trong thực tế, các middleware khác nhau sẽ làm nhiệm vụ khác nhau và ít khi cần phụ thuộc vào nhau). Tuy nhiên với một số trường hợp, cần sử dụng thứ tự của middleware, chúng ta có thể khai báo trong middlewarePriority trong Kernel. Link tới https://laravel.com/docs/8.x/middleware#sorting-middleware để biết thêm chi tiết cách sử dụng.


Cao Văn Thành

Mình đã làm việc với web được 1 thời gian và mình thích chia sẻ về công nghệ. Hy vọng chúng ta sẽ xây dựng được một cộng đồng vững mạnh cho thế hệ Dev GenZ tại Việt Nam.

Related Posts

PHP
PHP - Một số thứ lặt vặt cho người mới
June 09, 2021
1 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media