Service Provider trong laravel

ngày 28-08-2020

Lưu ý: Trước khi đọc bài viết này bạn nên tham khảo bài viết servce container trong laravel, để có thể dễ dàng hiểu được những thuật ngữ được trình bày trong bài viết

 

Service provider là gì:
 

Service provider là trung tâm của laravel, tất cả quá trình khởi động, thực thi code của core laravel, những ứng dụng của bạn hoặc ứng dụng bên thứ ba đều phải thông qua Service Provider

Các bạn có thể thấy trong app/config/app.php, đây sẽ là nơi tất cả các service provider được đăng kí, Khi cài bất kì ứng dụng nào thông qua composer, các bạn cũng để phải đăng kí các service provider

vào trong config này.

 

 

Bạn có thể thấy ngay dòng khai bào: App\Providers\AppServiceProvider::class, có nghĩa là mặc định, bạn đã có đăng kí sẵn một service provider  trống đó là:  App\Providers\AppServiceProvider

Ngoài ra để tạo service provider mới bạn có thể dùng lệnh: 

php artisan make:provider Provider_Name.

 

Các Hàm Trong Provider

 

Tất cả các service provider được kế thừa Illuminate\Support\ServiceProvider, hầu hết các service providers đều chứa hàm register và boot.
Tôi sẽ tạo mới một Service Provider như sau: php artisan make:provider RiakServiceProvider

 

Phương thức register ():

 

Trong phương thức này bạn chỉ nên đăng kí Service Container, và không nên đăng kí bất kì chức năng nào khác, hay viết những dòng code phức tạp, bởi vì
nếu không bạn có thể sử dụng một số chức năng nào đó chưa được tải lên.

 

 

Nếu service provider đăng kí nhiều ràng buộc đơn giản (simple binging) bạn có thể sử dụng thuộc tính bingdings và singletons thay vì đăng kí thủ công từng ràng buộc
trong register

 

 

 

Xin nhắc lại là để hiểu các Binding này, các bạn nên tham khảo bài service container  trong laravel nhé

 

Phương thức Boot ()


 Tương tự nhưng phương thức register, nhưng điểm khác biệt cơ bản ở đây là phương thức boot được gọi sau khi tất cả các dịch vụ khác đã được load, 
 vậy nên bạn có quyền truy cập vào tất cả các dịch vụ khác đã được đăng kí,
 Ơ phương thức boot, bạn có thể đăng kí view composer ở đây.

 

 

Phương thức provides();

 

Khi đăng kí ráng buộc trong service container, bạn có thể hoãn bingdings cho đến khi được gọi ra, điều này sẽ cải thiện hiệu suất của ứng dụng,
bạn có thể hoãn bằng các đăng kí class trong provides() method

 

 

Ngoài ra ta còn có thuộc tính:

protected $defer = true;

nếu ta gán bằng true, thì quá trình bingding sẽ bị hoãn cho đến khi được gọi, cái này giống như hàm provides, nhưng thay vì trì hoãn một số class thì ta sẽ trì hoãn nguyên cái service provider đó.


Bài viết có tham khảo từ nguồn: https://laravel.com/docs/7.x/providers#deferred-providers