Leitfaden zur Injektion von Abhängigkeiten in Controller

Leitfaden zur Injektion von Abhängigkeiten in Controller


Die Fassaden von Laravel präsentieren eine einfache Schnittstelle zu den nützlichsten Klassen in Laravels Codebasis. Sie können Informationen über die aktuelle Anfrage und die Benutzereingabe, die Sitzung, die Caches und vieles mehr erhalten.

Wenn Sie jedoch vorziehen, Ihre Abhängigkeiten zu injizieren, oder wenn Sie einen Dienst verwenden möchten, der keine Fassade hat, müssen Sie einen Weg finden, um Instanzen dieser Klassen in Ihren Controller einzubeziehen.

Alle Controller -Methoden (einschließlich der Konstrukteure) werden aus dem Container von Laravel aufgelöst. Dies bedeutet, dass alles, was Sie typisieren, dass der Container weiß, wie er auflöst.

Als schönes Beispiel, was ist, wenn Sie es vorziehen möchten, eine Instanz des Anforderungsobjekts zu haben, anstatt die Fassade zu verwenden?? Nur Typehint Iluminat \ http \ Anforderung in Ihren Methodenparametern:]

öffentlicher Funktionsstore (\ Illuminate \ http \ Anfrage $ Anfrage)

$ organisation = neue Organisation;
$ organisation-> name = $ request-> input ('name');
$ organisation-> Jahre = $ request-> Input ('Jahre');
$ organisation-> save ();
Return Redirect ('Organisationen');

Sie haben also einen Parameter definiert, der in die Store () -Methode übergeben werden muss. Und da Sie es typened haben und Laravel weiß, wie man diesen Klassennamen auflöst. Keine explizite Bindung, nichts anderes - es ist nur als $ Request -Variable da.

Übrigens, so bevorzugen ich und viele andere Laravel -Entwickler die Benutzereingabe: Injizieren Sie eine Instanz der Anforderung und lesen.