一直對服務(wù)提供者的原理也不會很明白了忌栅,今天特意去找了一下laravel在那里綁定服務(wù)提供者所提供的服務(wù)剖淀。
首先我們都知道laravel是單入口框架卷雕。那么一切的開始都是從index.php開始的蒸甜。
好多小伙伴就不理解了,為什么要在處理請求的時候才開始綁定配置中的服務(wù)提供者提供的服務(wù)呢睛竣。這里我猜測是為了晰房,減輕框架的開支,就比如說一個請求就不沒有通過路由器射沟,那就沒有必要去加載很多的服務(wù)殊者,直接返回就可以了,這樣验夯,優(yōu)化了框架的開支猖吴。
不信的小伙伴可以繼續(xù)往下看。
我們進(jìn)入生成$app的文件看一下
很明顯我們的框架只是加載了基本的三個服務(wù)挥转。
用來處理錯誤的服務(wù)海蔽。
任務(wù)調(diào)度的服務(wù)共屈。
處理http? 請求的服務(wù)。
那我們在配置文件里面配置的服務(wù)提供者的服務(wù)是在那里綁定的呢党窜?
我們開始去看index.php里面的這句話拗引。
$response = $kernel->handle(
? ? $request = Illuminate\Http\Request::capture()
);
寓意很簡單,就是開始處理請求幌衣,并生成返回矾削。
那么我們看一下http服務(wù)這個kernel里面的handle()方法。
Http/Kernel.php里面只是一些配置的中間件豁护,沒有什么可說的哼凯,那么我們進(jìn)去這個類的父類。
注意這里的$bootstrappers的數(shù)組里面的\Illuminate\Foundation\Bootstrap\RegisterProviders::class,
元素楚里,我們一會要提到他断部。
還是繼續(xù)上面的handle()方法。
那我們看上圖標(biāo)紅框的方法
看腻豌!這里有一個bootstrap()方法家坎。
繼續(xù)跟嘱能。
這里的bootstrapWith()方法里面的參數(shù)就是拿的我們這個數(shù)組
$this->app->bootstrapWith($this->bootstrappers());
這里的$this->app就是全局服務(wù)容器嘛吝梅,所以就去看\Illuminate\Foundation\Application這個文件嘍。
所以我們看到了這里我們會把
\Illuminate\Foundation\Bootstrap\RegisterProviders::class,這個服務(wù)解釋出來惹骂,那么就去看這個文件嘍
那就繼續(xù)看registerConfiguredProviders()
好了苏携,我們終于看到了app.providers這個字符串了。
謝謝大家