Laravel サービスプロバイダ 調べてみた

サービスプロバイダとは

Laravelフレームワークやアプリケーションに含まれる機能の初期化を行うもの。

具体的には、サービスコンテナへのバインド・ミドルウェア、ルーティング、イベントリスナーの登録・外部コンポーネントの読み込みを行うことで初期化を行っている。

名前から分かるように、サービスをプロバイドしている。

 

設定場所

config/app.phpのprovidersプロパティに定義されている。

例:

'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,
    ...

 

機能

サービスプロバイダには、registerメソッドとbootメソッド(なくても良い)が定義されており、このメソッドを実行することでサービスコンテナへのバインドを行っている。

※registerメソッド・・・初期処理の流れで初めに呼び出されるメソッド

※bootメソッド・・・他の機能も含めた全てのregisterメソッドのバインドが完了した後に呼び出されるメソッド。他の機能に依存している場合などはこのメソッドを使用する

以下、AuthServiceProviderの一部を用いて例を示す

AuthServiceProvider.php

class AuthServiceProvider extends ServiceProvider{
 public function register()・・・①
 {
 $this->registerAuthenticator();
 $this->registerUserResolver();
 $this->registerAccessGate();
 $this->registerRequirePassword();
 $this->registerRequestRebindHandler();
 $this->registerEventRebindHandler();
 }

 protected function registerAuthenticator()・・・②
 {
 $this->app->singleton('auth', function ($app) { ・・・③
 return new AuthManager($app);
 });

 $this->app->singleton('auth.driver', function ($app) {
 return $app['auth']->guard();
 });
 }
... 

①で、registerメソッドで呼び出すメソッドを記載している。

②で、実際にサービスコンテナにバインドする処理を記載している。

③では、名前を「auth」としてAuthManagerインスタンスを作成する処理をバインドしている。

このように、サービスプロバイダを実行することで、アプリケーションに必要な処理をサービスコンテナにバインドしている。

 

以上!!!!!!!!