服務提供者是Lumen應用啟動的中心,你自己的應用以及所有Lumen的核心服務都是通過服務提供者啟動。
但是,我們所謂的”啟動“指的是什么?通常,這意味著注冊對象,包括注冊服務容器綁定、事件監聽器、中間件甚至路由。服務提供者是應用配置的中心。
如果你打開Lumen自帶的 bootstrap/app.php文件,將會看到一個 $app->register()調用,這里就是應用所要加載的所有服務提供者類。
所有的服務提供者繼承自 Illuminate\Support\ServiceProvider類。繼承該抽象類要求至少在服務提供者中定義一個方法: register。在 register方法內,你唯一要做的事情就是綁定對象到服務容器,不要嘗試在其中注冊任何事件監聽器,路由或者任何其它功能。
2.1 register方法
正如前面所提到的,在 register方法中只綁定事物到服務容器,而不要做其他事情,否則話,一不小心就能用到一個尚未被加載的服務提供者提供的服務。
現在讓我們來看看一個基本的服務提供者長什么樣:
app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection(config('riak')); }); }}
該服務提供者只定義了一個 register方法,并使用該方法在服務容器中定義了一個 Riak\Connection的實現。如果你不太理解服務容器是怎么工作的,查看其文檔。
2.2 boot方法
如果我們想要在服務提供者中注冊視圖composer該怎么做?這就要用到 boot方法了。該方法在所有服務提供者被注冊以后才會被調用,這就是說我們可以在其中訪問框架已注冊的所有其它服務:
所有服務提供者都是通過配置文件 bootstrap/app.php中進行注冊,該文件包含了一個 $app->register()方法調用,你可以將自己自定義的服務提供者放到該方法調用中來注冊服務提供者。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com