2016-09-20 2 views
1

Ich versuche zu verstehen, wie Services Container in Laravel funktioniert. Also weiß ich, dass Dienste verwendet werden, um etwas zu haben, das Sie von Laravel einrichten möchten, oder?So lösen Sie den Service Provider im Controller?

Ich versuche, ein einfaches Beispiel mithilfe von LDAP php integrierten Funktionen zu machen. Ich habe dies in meinem 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; 
    }); 
} 

Da ist in meinem Controller ich versuche zu $ldap = resolve('ldap'); aber es funktioniert nicht, sagt es resolve existiert nicht. Ich habe es bereits mit $this->app->make versucht. Wie bekomme ich meine LDAP-Verbindung zurück?

+0

Ich denke, Sie möchten '$ this-> app-> make' verwenden und müssen ldap zu Ihrer Dienstanbieter-Konfigurationsdatei' config/app.php' hinzufügen. https://laravel.com/docs/5.3/providers – bassxzero

+0

aber ist dieser Code-Block nicht schon registriert den Service-Provider? AppServicePRovider wird standardmäßig bereits geladen, oder? –

+0

Diese Methode dient zum Registrieren der Bindung mit der App-Instanz. Voraussetzung ist, dass Sie bereits eine Instanz des Service-Providers haben. Es ist schwer zu erklären, ohne den Code zu betrachten. Kurz gesagt, wenn Laravel während des Bootstrappings die Diensteanbieter für Sie erstellt, müssen Sie ihm jedoch mitteilen, welche erstellt werden sollen. – bassxzero

Antwort

2

Die Hilfsmethode resolve() wurde erst mit Laravel 5.3 hinzugefügt. Es hört sich so an, als würdest du nicht 5.3 benutzen.

Alle resolve() Hilfsmethode ist sowieso die app() Hilfsmethode aufrufen. Sie können weiterhin die Hilfsmethode app() verwenden, um Abhängigkeiten aus dem Container aufzulösen.

Sie können auch die App Fassade verwenden, wenn Sie diese Methode bevorzugen.

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

Sie werden nur in der Lage sein, $this->app->make() von Ihrem Controller zu verwenden, wenn Sie das Application Container-Objekt injiziert haben, in dem Ihre ldap registriert Bindung wurde.

0

Anstatt eine Klasse mithilfe der Funktion aufzulösen, bevorzuge ich es normalerweise, sie entweder im Controller-Konstruktor oder in der route-Funktion vor irgendwelchen Parametern zu injizieren.

Verwandte Themen