laravel的服務提供者是什么

laravel的服務提供者是什么

如果你使用過 laravel 框架的話,那么,你不可能沒聽說過服務容器服務提供者。事實上,它們是 lavavel 框架核心,它們完成 larvel 應用中服務啟動的艱巨任務。

在這篇文章中,我們將給大家介紹laravel的服務提供者是什么?

在學習服務提供者之前,先簡單介紹一下服務容器,服務容器會在服務提供者中被經常使用。

簡而言之,Laravel 服務容器?是一個用于存儲綁定組件的盒子,它還會為應用提供所需的服務。

Laravel 文檔中描述如下:

Laravel?服務容器是用于管理類的依賴和執行依賴注入的工具?-?Laravel?文檔

這樣,當我們需要注入一個內置的組件或服務時,可以在構造函數或方法中使用類型提示功能注入,然后在使用時從服務容器中自動解析出所需實例及其依賴!是不是很酷?這個功能可以讓我們從手動管理組件中解脫出來,從而降低系統耦合度。

讓我們看一個簡單實例來加深理解。

<?php Class SomeClass {     public function __construct(FooBar $foobarObject)     {         // use $foobarObject object     } }

如你所見,SomeClass 需要使用 FooBar 實例。換句話說它需要依賴其它組件。Laravel 實現自動注入需要從服務容器中查找并執行注入適當的依賴。

如果你希望了解 Laravel 是如何知道需要將哪個組件或服務綁定到服務容器中的,答案是通過服務提供者實現的。服務提供者完成將組件綁定到服務容器的工作。在服務提供者內部,這個工作被稱之為服務容器綁定,綁定處理由服務提供者完成。

服務提供者實現了服務綁定,綁定處理則由 register 方法完成。

同時,這又會引入一個新的問題:Laravel 是如何知道有哪些服務提供者的呢?這個我們貌似還沒有討論到吧?我到時看到,之前有說 Laravel 會自動的去查找到服務!朋友,你的問題太多了:Laravel 只是一個框架,它不是一個超級英雄,不是么?我們當然需要去明確的告知 Laravel 框架我們有哪些服務提供者。

讓我們來瞧瞧 config/app.php 配置文件。你會找到一個用于 Laravel 應用啟動過程中被載入的服務提供者配置列表。

'providers'?=&gt;?[ ????????/* ?????????*?Laravel?Framework?Service?Providers... ?????????*/ ????????IlluminateAuthAuthServiceProvider::class, ????????IlluminateBroadcastingBroadcastServiceProvider::class, ????????IlluminateBusBusServiceProvider::class, ????????IlluminateCacheCacheServiceProvider::class, ????????IlluminateFoundationProvidersConsoleSupportServiceProvider::class, ????????IlluminateCookieCookieServiceProvider::class, ????????IlluminateDatabaseDatabaseServiceProvider::class, ????????IlluminateEncryptionEncryptionServiceProvider::class, ????????IlluminateFilesystemFilesystemServiceProvider::class, ????????IlluminateFoundationProvidersFoundationServiceProvider::class, ????????IlluminateHashingHashServiceProvider::class, ????????IlluminateMailMailServiceProvider::class, ????????IlluminateNotificationsNotificationServiceProvider::class, ????????IlluminatePaginationPaginationServiceProvider::class, ????????IlluminatePipelinePipelineServiceProvider::class, ????????IlluminateQueueQueueServiceProvider::class, ????????IlluminateRedisRedisServiceProvider::class, ????????IlluminateAuthPasswordsPasswordResetServiceProvider::class, ????????IlluminateSessionSessionServiceProvider::class, ????????IlluminateTranslationTranslationServiceProvider::class, ????????IlluminateValidationValidationServiceProvider::class, ????????IlluminateViewViewServiceProvider::class, ????????/* ?????????*?Package?Service?Providers... ?????????*/ ????????LaravelTinkerTinkerServiceProvider::class, ????????/* ?????????*?Application?Service?Providers... ?????????*/ ????????AppProvidersAppServiceProvider::class, ????????AppProvidersAuthServiceProvider::class, ????????//?AppProvidersBroadcastServiceProvider::class, ????????AppProvidersEventServiceProvider::class, ????????AppProvidersRouteServiceProvider::class, ],

以上就是有關服務容器的基本概念。

什么是服務提供者

如果說服務容器是提供綁定和依賴注入的的工具,那么 服務提供者 則是實現綁定的工具。

讓我們先來看一個內容提供的服務提供者服務來理解它的運行原理。打開 vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php 文件。

public?function?register() { ????$this-&gt;app-&gt;singleton('cache',?function?($app)?{ ????????return?new?CacheManager($app); ????}); ????$this-&gt;app-&gt;singleton('cache.store',?function?($app)?{ ????????return?$app['cache']-&gt;driver(); ????}); ????$this-&gt;app-&gt;singleton('memcached.connector',?function?()?{ ????????return?new?MemcachedConnector; ????}); }

這里我們需要將重點集中在 register 方法中,這個方法用于綁定服務到服務容器。如你所見,這里一共執行了三個服務的綁定處理:cache、cache.store 和 memcached.connector。

然后,當我們需要在 Laravel 中使用 cache 服務是,服務容器會解析出 CacheManager 實例并返回。也就是說我們僅僅是提供了一個可以從 $this->app 訪問的對應關系表。

通過服務提供者綁定服務是 Laravel 服務容器綁定服務的正確打開方式。同時通過服務提供者的 register 方法,還有利于理解 Laravel 服務容器是如何管理所有的服務的。我們之前提到過,通過從 config/app.php 配置文件中讀取服務提供者配置列表,從將所有服務注冊服務容器中。

以上,就是服務提供者的介紹。

更多laravel相關技術文章,請訪問laravel框架入門教程欄目進行學習!

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享