背景
最近、「ServiceProviderとは?使い方や使い道など」に関する質問を頂いた。
これに対して説明されているページを紹介して終了、がベストなのだが、Laravel初心者にも使い方が伝わるような簡潔な説明が見当たらないため、ここに私が出来る可能な限り簡潔な説明を記しておく。
説明
これがあると何が出来るか
あるサービスインスタンスに予め初期設定パラメータをセットしておき、アプリケーションのどの処理でもセット済のサービスインスタンスを使用することができる。
例
DBのホスト,ポート番号,ユーザー名,パスワード,DB名
※以下は実際とは異なるが、説明を分かりやすくするために敢えてこうしている
ServiceProvider.php
public function register()
{
// ここでサービスコンテナに「db」という名前でインスタンスを格納しておく
// ※「サービスコンテナ」については後述
$this->app->singleton('db', function ($app) {
// ここで初期設定パラメータをセットする
return new DatabaseManager(
config('database.host'),
config('database.port'),
config('database.username'),
config('database.password'),
config('database.database')
);
});
}
$users = resolve('db') // ServiceProviderで予め「db」という名前でコンテナに格納したインスタンスを取得する
->table('users')
->all();
サービスコンテナ
あるサービスインスタンスを設定パラメータのセットが済んだ状態で格納しておくところ。
おさらい
ServiceProviderは主に外部サービスを利用するためのサービスインスタンスを、設定パラメータのセットをしてサービスコンテナに登録しておくものである。