ngày
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 laravel
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ạo mới một sv provider bạn sử dụng lệnh artisan như đã nói ở trên:
ví dụ: php artisan make:provider RiakServiceProvider
Các phương thức trong service provider
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
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ì viết được tham khảo: 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.