© 2026 Laravel

Service Container Hooks: Can thiệp vào 'Birth' của Object

2 phút đọc
#laravel #internals #service-container #ioc

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Vấn đề

Đôi khi bạn cần cấu hình một class bên thứ 3 (ví dụ GuzzleHttp\Client) ngay khi Laravel vừa khởi tạo nó. Nếu bạn không muốn sửa source code của nó, bạn làm thế nào?

#2. Định nghĩa: Hooks

Laravel Container cung cấp “hooks” để bạn bắt lấy đối tượng ngay thời điểm nó vừa chào đời:

  • resolving(): Chạy NGAY khi đối tượng được tạo, trước khi nó được trả về nơi yêu cầu.
  • afterResolving(): Chạy SAU khi đối tượng đã sẵn sàng.

#3. Ví dụ thực tế

Tự động thêm API Key cho mọi instance của GuzzleClient được tạo ra:

$this->app->resolving(\GuzzleHttp\Client::class, function ($client, $app) {
    $client->setConfig(['headers' => ['Authorization' => 'Bearer ...']]);
});

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

  • Ứng dụng: Global config cho các thư viện SDK, logging runtime cho class cụ thể.
  • Mẹo: Dùng hook này để thực hiện “Aspect-Oriented Programming” (AOP) kiểu Laravel: thêm logging/cấu hình mà không cần sửa code class gốc.

Bài viết liên quan