laravel 基礎教程 -- 服務提供者

來源:互聯網
上載者:User

簡介

服務提供者是 laravel 應用啟動的中心。你自己的應用以及 laravel 的核心服務都是通過服務提供者來啟動的。

但是,我們所指的啟動是什麼意思?通常情況下,這意味著註冊,包含註冊服務的綁定,事件監聽,中介軟體,和路由。服務提供者是應用配置的中心。

如果你開啟 config/app.php 檔案,你會發現 providers 數組。這些都是你的應用將要載入的服務提供者類。當然,很多是消極式載入的提供者,意思就是並不是所有的請求都會載入這些提供者,而是只有需要的時候才會載入。

在此篇,你將學會如果去編寫自己的服務提供者並且將其註冊到應用中。

編寫服務提供者

所有的服務提供者都繼承自 Illuminate\Support\ServiceProvider 類。這個抽象類別要求你的提供者必須最少定義一個 register 方法。在 register 方法中你應該只綁定內容到服務容器。你永遠不要嘗試在其中註冊任何的事件監聽,路由或者其它功能。

Artisan CLI 可以通過 make:provider 命令來非常便捷的產生一個新的提供者:

php artisan make:provider RiakServiceProvider

註冊方法

就如前面所提到的,在 register 方法中,你應該只做一件事,那就是綁定事物到服務容器中。不要做其它的事情。否則,可能你所使用的提供者提供的服務還沒有被註冊。現在,讓我們來看一個最基礎的服務提供者:

app->singleton(Connection::class, function ($app) {         return new Connection(config('riak'));     });   }}

這個服務提供者僅僅只定義了一個 register 方法,並且使用這個方法在服務容器中定義了一個 Riak\Connection 的實現。如果你並不理解服務容器是如何工作的,你可以看一下服務容器的文檔。

啟動方法

如果我們想在服務提供者中註冊一個視圖 composer,那麼我們應該在 boot 方法中做這些。boot 方法會在所有的服務提供者都註冊完成之後才會被執行。這意味著你有訪問所有服務的許可權:

composer('view', function () {       //     });   }}

啟動方法的依賴注入

你可以在服務提供者的 boot 方法中使用類型提示來標識依賴。服務容器將會自動的將所需要的依賴注入進去:

use Illuminate\Contracts\Routing\ResponseFactory;public function boot(ResponseFactory $factory){  $factory->macro('caps', function ($value)){    //  };}

註冊提供者

所有的服務提供者都被註冊在 config/app.php 設定檔中。這個檔案包含了 providers 數組,這數組列出了所有服務提供者的名字。預設的,laravel 中的核心服務都被註冊在這個數組裡。這些提供者啟動了 laravel 中的核心組件,如郵件,隊列,緩衝和其他。

你可以在該數組中進行添加註冊提供者:

'providers' => [  // Other Service Providers  App\Providers\AppServiceProvider::class,],

消極式載入提供者

如果你的提供者只是在服務容器中註冊一些綁定資訊,那麼你可以選擇延遲註冊,這樣這些服務只有在真正被需要用到時才會進行註冊。延遲註冊能夠提高你的應用的效能。因為它不會在所有請求到來時都通過檔案系統來載入。

為了延遲提供者的載入,你可以在提供者類中設定 defer 屬性為 true 並且定義一個 provides 方法。provides 方法會返回提供者註冊的服務容器的綁定:

app-singleton(Connection::class, function ($app) {        return new Connection($app['config']['riak']);      });    }    /**     * Get the services provided by the provider.     *     * @return array     */     public function provides()     {        return [Connection::class];     }}

laravel 會編譯和儲存所有消極式載入的服務提供者的服務列表及服務提供者的類名。然後,只有當你嘗試解析其中的某個服務時,laravel 才會載入其服務提供者。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.