首頁 >php框架 >Laravel >laravel的服務提供者是什麼

laravel的服務提供者是什麼

藏色散人
藏色散人原創
2019-06-18 13:56:385106瀏覽

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 應用程式啟動過程中被載入的服務提供者設定清單。

&#39;providers&#39; => [
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,
        Illuminate\Encryption\EncryptionServiceProvider::class,
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
        Illuminate\Hashing\HashServiceProvider::class,
        Illuminate\Mail\MailServiceProvider::class,
        Illuminate\Notifications\NotificationServiceProvider::class,
        Illuminate\Pagination\PaginationServiceProvider::class,
        Illuminate\Pipeline\PipelineServiceProvider::class,
        Illuminate\Queue\QueueServiceProvider::class,
        Illuminate\Redis\RedisServiceProvider::class,
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
        Illuminate\Session\SessionServiceProvider::class,
        Illuminate\Translation\TranslationServiceProvider::class,
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
        /*
         * Package Service Providers...
         */
        Laravel\Tinker\TinkerServiceProvider::class,
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
],

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

什麼是服務提供者

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

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

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

這裡我們需要將重點集中在 register 方法中,這個方法用於綁定服務到服務容器。如你所見,這裡一共執行了三個服務的綁定處理:cachecache.storememcached.connector

然後,當我們需要在 Laravel 中使用 cache 服務是,服務容器會解析出 CacheManager 實例並傳回。也就是說我們只是提供了一個可以從 $this->app 存取的對應關係表。

透過服務提供者綁定服務是 Laravel 服務容器綁定服務的正確開啟方式。同時透過服務提供者的 register 方法,也有利於理解 Laravel 服務容器是如何管理所有的服務的。我們之前提到過,透過從 config/app.php 設定檔讀取服務提供者設定列表,從將所有服務註冊服務容器中。

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

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

以上是laravel的服務提供者是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn