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à 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.
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
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é
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.
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
Thông tin về khóa học Lập Trình FullStack PHP, Cam kết có thể đi làm sau khóa học
Làm chủ laravel trong vòng 2 tháng, Cam kết có thể đi làm sau khóa học, chỉ 700k/tháng
Nhận Làm Website Giá Rẻ, chỉ từ 3 triệu đã có một site chuẩn SEO cực chất, bao hosting và tên miền 1 năm.