laravel的服務容器(藥箱)、服務提供者(小盒子)、Facades(更方便用藥)

服務容器(藥箱)

就是這個$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.處理請求,返回響應內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章