概要
Laravelではサービスコンテナに登録されているサービスを利用してアプリケーションを開発します。
Laravelにはメールの送信、文字列の暗号、ファイル操作するといったサービスがあります。
これらのサービスは入れ物となるサービスコンテナへ事前に登録することで利用できるようになります。
そして、これらのサービスを登録する役目をもつものがサービスプロバイダです。
サービスプロバイダの作成
手作業でも作成できますがartisanコマンドを利用すればProvidersフォルダ内に自動でサービスプロバイダのファイルが作成されます。
php artisan make:provider SampleServisProvider
ディレクトリ構造
app\Providers内に作成されます。
既存のファイルについては省略します。
app
├─ Providers
| ├─ SampleServisProvider.php
作成されるファイル
生成されたファイルの中身は以下のようになっています。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class RiakServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
ServiceProviderの中身
サービスプロバイダはServiceProviderクラスを継承して作成され、registerとbootのメソッドが用意されます。
どちらのメソッドもvoid型です。
regiterメソッド
サービスプロバイダへ登録を行う処理のみを記述します。
他の処理を記述すると、サービスプロバイダがロードしていないサービスを意図せずに使用する原因になります。
public function register()
{
// 登録したいサービスの処理を記述
}
bootメソッド
アプリケーションへのブートストラップ処理を記述します。
ブートストラップ処理とは、アプリケーションが起動する際に実行される処理のことです。
ここに処理を設定することで、ビューを生成する際に自動的にコンポーサーが呼び出されるようになります。
public function boot()
{
// ブートストラップ処理を記述
}
サービスプロバイダの登録
作成したサービスプロバイダを実行できるようにアプリケーションへ登録します。
configフォルダにあるapp.phpに作成したサービスプロバイダクラスを追加します。
config
├─ app.php
'providers' => [
// ...中略...
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
// ここから
App\Providers\SampleServiceProvider::class,
// ここまで
]