© 2026 Laravel

Laravel Pipeline: Giải mã 'Onion Model' của Middleware

2 phút đọc
#laravel #internals #middleware #pipeline #architecture

#1. Bài toán

Bạn có một hệ thống xử lý Request đi qua 10 lớp Filter (Auth, XSS, Rate limit, Log, Cache…). Code if/else sẽ thành thảm họa.

#2. Giải pháp: Pipeline Pattern

Middleware trong Laravel không chạy tuần tự độc lập, chúng lồng nhau (Onion Model). Khi request vào, nó đi từ ngoài vào trong. Khi response ra, nó đi từ trong ra ngoài.

#3. Bản chất code

Laravel sử dụng array_reduce để cuốn gói các middleware thành một chuỗi closure:

$pipeline = array_reduce(array_reverse($pipes), function ($next, $pipe) {
    return function ($request) use ($next, $pipe) {
        return $pipe->handle($request, $next);
    };
}, $destination);

#4. Ứng dụng & Mẹo

  • Dùng Pipeline để làm các “Business Workflow” thay vì middleware: Pipeline::send($order)->through([...])->thenReturn().
  • Mỗi lớp chỉ làm đúng 1 việc.

#5. Phỏng vấn

Q: Sự khác biệt giữa Filter và Pipe? A: Filter chỉ trả về true/false để quyết định có đi tiếp không. Pipe có thể biến đổi đối tượng dữ liệu trước khi gửi cho Pipe tiếp theo. Q: Pipeline có hỗ trợ async không? A: Không, Pipeline của Laravel chạy đồng bộ. Để chạy async, bạn cần đẩy vào Queue worker.

Bài viết liên quan