2016-09-20 1 views
1

サービスコンテナがLaravelでどのように機能するかをよりよく理解しようとしています。だから私はサービスがあなたがLaravelによってセットアップされたものを使用したいものを持っているのに使われていることを知っていますよね?コントローラのサービスプロバイダを解決するには?

私はLDAP php組み込み関数を使って簡単な例を作ろうとしています。私は私のAppServiceProvider.phpでこれを持っている:

public function register() 
{ 
    $this->app->bind('ldap', function() { 
     $conn = ldap_connect(env('LDAP_HOST')); 
     ldap_bind($conn, env('LDAP_BIND'), env('LDAP_PWD')); 
     return $conn; 
    }); 
} 

はその後、私のコントローラで私が$ldap = resolve('ldap');にしようとしているが、それは働いていない、それはresolveが存在しないと言います。私はすでに$this->app->makeで試しました。私はどのように私のLDAP接続を取得しますか?

+0

あなたは '$ this-> app-> make'を使いたいと思うし、サービスプロバイダの設定ファイル' config/app.php'にldapを追加する必要があります。 https://laravel.com/docs/5.3/providers – bassxzero

+0

このコードブロックは既にサービスプロバイダを登録していますか? AppServicePRoviderは既にデフォルトで読み込まれていますか? –

+0

このメソッドは、アプリケーションインスタンスにバインディングを登録するためのメソッドです。既にサービスプロバイダのインスタンスが必要です。コードを見ずに説明するのは難しいです。つまり、Laravelがブートストラップ中にサービスプロバイダを作成するときに、作成するサービスプロバイダを指定する必要があります。 – bassxzero

答えて

2

resolve()ラーベル5.3まではヘルパーメソッドが追加されていません。 5.3を使用していないようです。

すべてresolve()ヘルパーメソッドは、とにかくapp()ヘルパーメソッドを呼び出します。 app()ヘルパメソッドを引き続き使用して、コンテナからの依存関係を解決することができます。

$ldap = app('ldap'); 

この方法を使用する場合は、Appファサードを使用することもできます。

$ldap = App::make('ldap'); 

あなただけがあなたのldap結合が登録されたApplicationコンテナオブジェクトを注入してきた場合、あなたのコントローラから$this->app->make()を使用することができます。

0

関数を使用してクラスを解決する代わりに、私は通常、パラメータの前にControllerコンストラクタまたはルート関数のいずれかに注入する方が好きです。

関連する問題