Laravelをやっていて、次に分かり難かった概念、サービスプロバイダについて。
アプリケーション開発にはデータベース、ファイル操作、ログ操作など様々な操作があり、個別のビジネス処理以外で共通化できるものが多々あります。
これらをサービスコンテナといい、Laravelでは config/app.php で一覧が列挙され、個別のProvidersに関しては app/Providers 以下に定義されています。
一例としてDebugbarを登録した時の例です。
config/app.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php return [ 'providers' => [ Barryvdh\Debugbar\ServiceProvider::class, ], 'aliases' => [ 'Debugbar' => Barryvdh\Debugbar\Facade::class, ], ]; |
app/Providers/AppServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use DB; use Log; use Request; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { $class = 'Barryvdh\Debugbar\ServiceProvider'; if (class_exists($class)) { $this->app->register($class); } } } |
このように登録することによって、メリットはMiddlewareと近いのですが、
- 個別のビジネスロジックに共通処理を入れる必要がない
- 変更があった時にここのビジネスロジックとサービスが連動しておらず、保守性が高い
と言うことが言えるかと思います。