服務容器(藥箱)
就是這個$app
綁定(放藥)
$app->bind('Apple', function(){
return 一個對象;
})
解析(取藥)
resolve('Apple'); //返回一個上面設定好的對象
$this->app->make('HelpSpot\API');
app()->make('HelpSpot\API');
app('HelpSpot\API');
app()['HelpSpot\API']
app()->get('HelpSpot\API')
public function xxx(HelpSpot\API $users)
// 注入依賴
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);
$api = app('HelpSpot\API', ['id' => 1]);
$api = resolve('HelpSpot\API', ['id' => 1]);
服務提供者(小盒子)
增加服務提供者是因爲藥箱裏藥太亂了,什麼藥都可以亂放或者說我們不知道里面有哪些藥,所以現在要把藥放到小盒子裏,然後再把它註冊好(config/app.php中註冊,這樣方便讓我們知道我們有哪些小盒子)之後放進藥箱裏,這樣
沒有註冊的小盒子裏的藥就解析不到,註冊了的就可以取藥。
創建服務提供者(創建小盒子)
php artisan make:provider AbcServiceProvider
綁定服務(把藥放進小盒子裏)
通過register()
可以把綁定的服務啓動時就將服務對象自動加載進內存,也就是放藥(需要先進行下面的註冊操作纔可以),這樣後面要用到的話纔可以取藥,當然,也有延遲的服務提供者,可以等到需要的時候再加載到內存中(需要該服務提供者去實現延遲provider接口)
public function register () {
$this->app->bind('Abc', function() {
return 一個Abc服務對象;
})
}
//容器調用完所有服務提供者的register方法之後纔會調用boot方法
public function boot () {
}
//實現延遲服務提供者接口纔可以使用
public function provides() {
return ...
}
註冊服務提供者(把小盒子放進藥箱裏)
會自動加載註冊了的服務提供者
注意: 不註冊的話藥箱裏找不到這個小盒子也就找不到這個藥
在
config/app.php
中註冊
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Application Service Providers...
*/
App\Provider\AbcServiceProvider::class
],
Facades(更方便用藥)
之前的解析(取藥):resolve('Apple')
,這樣太麻煩了,我們如果要用到藥,還得去查看它的標籤是啥,例如是Apple
請求生命週期
1.所有請求必定首先通過 public/index.php。
2.在上述這個文件中首先加載 composer 自動加載文件,然後從
bootstrap/app.php 實例化一個服務容器。
3.接下來,框架會根據請求類型傳送請求至 app/Http/Kernel.php 或者 app/Console/Kernel.php。
4.app/Http/Kernel.php 擴展了Illuminate\Foundation\Http\Kernel 類,父類強制在處理請求前應該做哪些操作,操作內容都放到了 bootstrappers 數組裏面(配置錯
誤處理、配置記錄日誌、檢測應用環境、註冊和啓動服務提供者等)。子類在數組 middleware 中規定了請求在被處理前必須經過的一些處理(讀寫 session、判斷是否處於維護模式、驗證 csrf 令牌等)。
5.處理請求,返回響應內容。