Laravelのサービスプロバイダ使用編

3782 ワード

神秘的なベール、时にはそれを読まないで、それは良い牛だと思って、良い牛が追い詰めます!
バージョンの説明
Laravel 5.2、その他のバージョンは対応マニュアルを見て、その後5.3,5.4,5.5,5.6を出して絶えず補充します.
公式プロフィール
すべてのLaravelアプリケーションが起動する中心であり、すべてのLaravelのコアサービスはサービスプロバイダによって起動され、サービスプロバイダはアプリケーション構成の中心である.
ここではIOC(コントロール反転)も依存注入と呼ぶことを知る必要がある.このIOCはもう一つの文章を書くつもりで、その時になってからリンクを貼るつもりです.
使用の原則
クラスがインタフェースに基づいていない場合は、コンテナにバインドする必要はありません.単純なクラスであれば、余計なことをする必要はありません.
サービスプロバイダの作成
作成後のファイルの場所:app/Providers/下
php artisan  make:provider TestServiceProvider

組織に参加しないと見つからないconfig/app.php
'providers' => [
  ...
App\Providers\TestServiceProvider::class,
]

1.boot関数
これは一般的に論理を書くガイドで、カスタムBlade命令の文章を参照して理解することができます.
#EXP
 public function boot()
 {
        view()->composer('view', function () {
            //
        });
}


2.regist関数
登録またはバインドの意味は、登録は私たちにアプリケーションを教えて、私のこの関数はすでに登録して、あなたはそれを通じて依存を実現することができて、さもなくば依存を注入することができませんと言います
2.1登録方法
singletonを使用して単一の例をバインドします.この方法では、ネーミングスペースを書き込む必要がなく、別名を直接呼び出すことができます.
 $this->app->singleton('test',function(){
            return new TestService();
});
// 
//$this->app->singleton('test','App\Services\TestService');

ここでの「test」はバインドインスタンスの別名を表し、後で匿名関数に対応し、実装方法を表し、もちろん直接クラスを書くこともできます.
これはどのように呼び出すか、App::makeで呼び出すかapp()関数で登録します.
$test = App::make('test');//  $this->app->make('test'); app('test')
$test->callMe('TestController');

bindを使用してインスタンスをインタフェースにバインドし、注入に依存します.
$this->app->bind('App\Contracts\TestContract',function(){
            return new TestService();
});
// 
//$this->app->bind('App\Contracts\EventPusher', 'App\Services\TestService');

ここでの「AppContractsTestContract」は、この依存注入が必要な場合、後の匿名関数を実行する必要があると考えられます.ここでもクラスの最初のパラメータを直接書くことができます.最初のパラメータは名前と考えることができます.2番目は実装方法です.
呼び出し形式
test = $test;
   }
   public function index()
  {
      
       $this->test->callMe(222);;
        return view('index');
  }

}


Instance登録インスタンス
$test_Service= new TestService();

$this->app->instance('TestService', $test_Service);//        ,

よびだし
 $this->app->make('TestService'); $this->app['TestService'];

tagラベル使用
$this->app->bind('SpeedReport', function () {
    //
});

$this->app->bind('MemoryReport', function () {
    //
});

$this->app->tag(['SpeedReport', 'MemoryReport'], 'reports');

//  
$test = App::make('reports');// $test = $this->app->make('reports'); app('reports')
$test->callMe('TestController');

≪イベント|Events|ldap≫
JSのリスニングイベント、例えばクリックしたリスニング時間に似ています.
$this->app->resolving(function ($object, $app) {
    //              
});

$this->app->resolving(function (FooBar $fooBar, $app) {
    //     “FooBar”     
});

他の方法は、マニュアルを見てみましょう.簡単です.
実装例このドキュメントを参照してください.ここではくどくどしません.http://laravelacademy.org/post/796.html