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インスタンスを作成する処理をバインドしている。
このように、サービスプロバイダを実行することで、アプリケーションに必要な処理をサービスコンテナにバインドしている。
以上!!!!!!!!