2016-09-02 3 views
1

現在、laravelフレームワークがどのように構築され、サービスプロバイダセクションに到達したかを学んでいます。私はこのコード行を参照してくださいのServiceProviderクラス拡張クラスDatabaseServiceProviderに:Laravel Binding Service Providerのコンセプト

$this->app->singleton('db.factory', function ($app) 
{ 
    return new ConnectionFactory($app); 
}); 

イムをアプリは、アプリケーションからのオブジェクトであるかどうかの$ this - >アプリでアプリは、何であるか混乱それがインスタンス化されたときにそうであれば、DatabaseServiceProviderクラスからインスタンス化プロセスを見ることはできません。この初心者の質問に答える前にthnks。

答えて

1

Laravelでは、app変数はサービスコンテナです。それをフレームワークの心のように考えてください。ファサードからDB接続までのすべてがそこに保存されています。

また、指定した方法($this->app->singleton())を使用して、独自のオブジェクトをコンテナに格納することもできます。実際には、コンテナとやりとりする方法はもっとたくさんあります。これを研究するための最良の方法は、サービスプロバイダでそれを見ることができないので、Laravelのドキュメント(Laravel Service Container

オブジェクトはLaravelのブートストラップでインスタンス化されているアプリに見ることです。私はそれを見つけるためにフレームワークに深く掘り下げるほど興味があったのですが。クラス自体はIlluminate\Foundation\Applicationにあり、bootstrap/app.phpでインスタンス化されています。

+0

私はそれが依存性注入サーと呼ばれるものだと思いますか?実行時にインスタンス化されたアプリケーションオブジェクトを行うのではなく、初めてクラスが定義したクラスですか? – Jsnow

+0

クラスは 'bootstrap/app.php'でインスタンス化されています。依存関係注入は、基本的に、この 'public function __consctruct(User $ user)'のようなメソッドパラメータにクラスをタイプヒントするときです。 Laravelがアプリケーションコンテナで行うことは、これらの依存関係を自動的に解決することです。詳細はこちら - [Larvel Routing - 明示的バインディング](https://laravel.com/docs/master/routing#explicit-binding) –

+0

完全な参考文献をお寄せいただきありがとうございます – Jsnow