Googleで検索しようとしましたが、詳細な情報が見つかりませんでした。
サービスプロバイダーは、関連するIoC登録を1つの場所にグループ化する優れた方法です。それらをアプリケーションのbootstrapコンポーネントへの方法と考えてください。
ドキュメントから理解していない。これは、パッケージを作成するときにのみ必要ですか?だから私が通常の開発者であり、パブリックにリリースするパッケージを作成していないとき-気にする必要はありませんか?
よく設計されたLaravelアプリケーションを構築するための鍵の1つは、サービスプロバイダーを組織ツールとして使用することを学習することです。 app/startファイル:これらのファイルでコンテナー登録を行う代わりに、関連サービスを登録するサービスプロバイダーを作成します。
したがって、これは、アプリケーションのサービスを1か所に整理して、より整理された状態に保つ方法です。サービスプロバイダーには、少なくとも1つのメソッドregisterが必要です。 registerメソッドは、プロバイダーがクラスをコンテナにバインドする場所です。要求がアプリケーションに入り、フレームワークが起動すると、構成ファイルにリストされているプロバイダーでregisterメソッドが呼び出されます
_'providers' => array(
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
// more ...
'Illuminate\Html\HtmlServiceProvider',
// more ...
)
_
これは_app.php
_構成ファイルのプロバイダー配列であり、これは_'Illuminate\Html\HtmlServiceProvider.php'
_に格納されているHtmlServiceProvider
です。
_use Illuminate\Support\ServiceProvider;
class HtmlServiceProvider extends ServiceProvider {
//...
public function register()
{
$this->registerHtmlBuilder();
$this->registerFormBuilder();
}
protected function registerHtmlBuilder()
{
$this->app['html'] = $this->app->share(function($app)
{
return new HtmlBuilder($app['url']);
});
}
protected function registerFormBuilder()
{
$this->app['form'] = $this->app->share(function($app)
{
$form = new FormBuilder($app['html'], $app['url'], $app['session']->getToken());
return $form->setSessionStore($app['session']);
});
}
}
_
Laravel
が起動すると、この(register
)メソッドを呼び出します。このメソッドには2つの行があり、これらの行はregisterHtmlBuilder()
とregisterFormBuilder()
、これら両方のメソッドはIoC
コンテナへのコンポーネントを使用して
_$this->app['html'] = $this->app->share(...);
$this->app['form'] = $this->app->share(...);
_
この場合、両方とも_html/form
_クラスのインスタンスを返す匿名関数であるため、使用する場合は
_Html::link(...);
_
または、フォームを使用して
_Form::input(...);
_
アプリケーションで使用可能な_$app
_オブジェクトからバインドクラスを取得します。この場合、_'Html' => 'Illuminate\Support\Facades\Html',
_を使用して、_app.php
_ファイルのaliases
配列のメインクラスにエイリアスを作成します。
したがって、Laravel
のサービスプロバイダーは、アプリケーションの起動プロセス中に、すてきな方法で物事を整理する方法です。Laravel
は、すべてのregister
メソッドを実行します各コンポーネントがIoC
コンテナーに使用可能(バインド)になるようにサービスプロバイダーを設定し、アプリケーションでアクセスできるようにします。
サービスプロバイダーからすべてのregister
メソッドを呼び出した後、それらのサービスプロバイダーからすべてのboot
メソッドが呼び出されることに注意してください。その場合、サービスプロバイダークラス内のアプリケーション(IoC /サービスコンテナー)からサービスを使用する必要がある場合、サービスプロバイダーの登録中にサービスが利用可能であることは保証されないため、ブートメソッドからそのサービスを使用する必要があります(registerメソッド内)サービスは各サービスプロバイダーのregister
メソッドを介して登録されますが、boot
メソッド内ではすべてのサービスが登録されることが望ましいため、任意のサービスを使用できます。
この回答を確認してください Laravel 4:ファサードはどのように解決されますか? も、理解に役立つかもしれません。
サービスプロバイダーができることは何もありません。app/ start/global.phpに平手打ちすることはできませんが、サービスプロバイダーを使用すると、すべてのロジックを1か所に集めて、よりモジュール方式でアプリケーションを開発できます。
パッケージを作成する場合、サービスプロバイダーはほとんど必須です。
Laravelでは、サービスプロバイダーはIoCコンテナーの動作方法に直接関係しています。依存関係へのより簡単でモジュール化されたアプローチが可能になります。実際、コードをbootstrapのように(Laravelの外側であっても)に整理するのに最適なパターンです。通常の開発者であれば、 Laravel=サービスプロバイダーの基本を知る必要があります。そのパターンはLaravelアーキテクチャの不可欠な部分です。作業を簡単にすることができると確信しています。
たとえば、パッケージをインストールする場合、アプリケーションはそのパッケージへのアクセスを許可する必要があります。最良の解決策の1つは、サービスプロバイダーリストとファサードを使用することです。一方、SP-sの基本を知らずにLaravel開発者になることは想像できません。