Service provider là gì

      23

Giới thiệu vềService Providers trong laravel

Service providers là địa chỉ trung tâm của toàn bộ các áp dụng Laravel bootstrapping. Ứng dụng của người sử dụng, cũng giống như những core service của Laravel được "bootstrapped" thông qua service providers.

Bạn đang xem: Service provider là gì

Nhưng, "bootstrapped" tức thị gì? Nói thông thường, bọn chúng ý là đăng ký, bao gồm đăng kí những liên kết tới service container, event listeners, middleware, với thậm chí những route. Service providers là trung tâp để thông số kỹ thuật vận dụng của bạn.

Nếu các bạn mngơi nghỉ tệp tin config/ứng dụng.php đi kèm vào Laravel, các bạn sẽ thấy một mảng providers. Tất cả phần đông service provider class này sẽ tiến hành load vào trong áp dụng. Tất nhiên, nhiều trong các này được Gọi là "deferred" providers, tức thị chúng chưa hẳn được load vào hầu như request, chỉ Khi gồm service như thế nào đòi hỏi thì mới được Hotline đến.

Trong phần tổng quát này, các bạn sẽ học tập giải pháp viết service providers của riêng rẽ các bạn cùng đăng kí chúng cùng với Laravel.

Writing Service Providers

Tất cả các service providers gần như thừa kế tự class IlluminateSupportServiceProvider. Hầu hết service providers đựng thủ tục register và boot. Trong thủ tục register, chúng ta nên only bind things into lớn the . Bạn đừng bao giờ nỗ lực đăng kí bất cứ những event listeners, routes giỏi bất cứ chức năng nào không giống vào trong cách tiến hành register.

Xem thêm: Living 4 God: Will I Prevail? Lmht League Of Legends Live Stream Video

Artisan CLI có thể dễ dãi sinh ra một provider bắt đầu thông qua lệnh make:provider:

php artisan make:provider RiakServiceProvider

The Register Method

Như vẫn kể sống trước, bên trong phương thức register, các bạn chỉ bind rất nhiều sản phẩm vào trong . quý khách hàng chớ lúc nào cố gắng ĐK bất kỳ event listeners, routes xuất xắc bất kì những công dụng nào không giống vào vào cách thức register. Nếu không, các bạn vô tình hoàn toàn có thể áp dụng một service được cung ứng bởi vì một service provider cơ mà chưa được load.

Hãy xem một ví dụ service provider cơ bản dưới. Trong ngẫu nhiên cách làm như thế nào của service provider, các bạn luôn có quyền truy vấn vào trực thuộc tính $phầm mềm, nó cung cấp quyền để truy cập vào service container:

app->singleton(Connection::class, function ($app) return new Connection(config("riak")); ); }}

Service provider này hướng đẫn nghĩa 1 phương thức register, với áp dụng phương thơm twhcs đó để define một implementation của RiakConnection trong service container. Nếu các bạn không hiểu nhiều service container chuyển động thế nào, hãy coi này.

ThebindingsAndsingletonsProperties

Nếu service provider của doanh nghiệp ĐK các rằng buộc đơn giản và dễ dàng, chúng ta cũng có thể ao ước áp dụng thuộc tính bindings với singletons cầm cố vị đăng ký bằng tay thủ công từng container binding. Khi service provider được load vì framework, nó vẫn tự động đánh giá cá nằm trong tính này với đăng ký các binding của chúng:

DigitalOceanServerProvider::class, >; /** * All of the container singletons that should be registered. * *
var array */ public $singletons = < DowntimeNotifier::class => PingdomDowntimeNotifier::class, >;}

The Boot Method

Vậy trường hợp nhỏng họ muốn đăng kí một vào vào service provider thì sao? Vấn đề này rất có thể thực hiện bên trong thủ tục boot. Phương thơm thức này được call sau khoản thời gian tất cả những service providers đã có đăng kí, nghĩa là chúng ta có thể truy vấn vào trong tất cả các services đã có đăng kí vào trong framework:

composer("view", function () // ); }}

Boot Method Dependency Injection

quý khách hàng hoàn toàn có thể type-hint dependencies cho service provider của người tiêu dùng sinh sống cách làm boot. vẫn auto inject bất cứ dependencies như thế nào chúng ta cần:

use IlluminateContractsRoutingResponseFactory;public function boot(ResponseFactory $response) $response->macro("caps", function ($value) // );

Registering Providers

Tất cả những service provider được đăng kí bên trong tệp tin thông số kỹ thuật config/ứng dụng.php. File này đựng một mảng providers nơi cơ mà bạn cũng có thể liệt kê thương hiệu class của các service providers. Mặc định, một tập đúng theo những core service provider của Laravel nằm trong mảng này. Những provider này có tác dụng nhiệm vụ khởi tạo những nguyên tố core của Laravel, ví như mailer, queue, cabịt, và những nhân tố khác.

Để ĐK provider của doanh nghiệp, thêm nó vào mảng:

"providers" => < // Other Service Providers AppProvidersComposerServiceProvider::class,>,

Deferred Providers

Nếu provider của người tiêu dùng chỉ ĐK những bindings trong , chúng ta có thể chọn trì hoãn câu hỏi đăng kí của bản thân mình cho tới khi nào cần thiết. Việc trì hoãn quá trình load một provider đã cải thiện performance mang đến áp dụng, vì chưng nó ko load tự filesystem đến các request.

Xem thêm: Bán Samsung Note Edge Scl24 Xách Tay, Mới 99%, Samsung Galaxy Note Edge

Laravel biên dịch và lưu một danh sách toàn bộ các services hỗ trợ vì chưng deferred service providers, với tên class service provider của nó. lúc kia, chỉ bao giờ bạn cần resolve sầu một trong số những service này thì Laravel bắt đầu thực hiện load service provider.

Để trì hoàn việc load một provider, set ở trong tính defer thành true cùng có mang một thủ tục provides. Pmùi hương thức provides đã trả về binding service container cơ mà provider này đăng kí:

app->singleton(Connection::class, function ($app) return new Connection($app<"config"><"riak">); ); } /** * Get the services provided by the provider. * *

Chuyên mục: Tin Tức