2017-03-20 3 views
0

Ok, ich habe mir die Laracast Videos zum Thema angeschaut und auch die Dokumentation gelesen, trotzdem vermisse ich hier den Kernpunkt. Lassen Sie uns sagen, dass wir die folgende Struktur haben:Wie benutze ich Laravel Service Container richtig?

enter image description here

So habe ich verstanden, wie ein Service-Provider zu erstellen, um eine Klasse zu den Service-Container binden und lösen Sie es später. Was aber, wenn die "MyCustomClass" -Bindung ersetzt werden muss, sagen wir "\ App \ SomeOtherClass". Das würde zu einer Ausnahme führen, dass "SomeOtherClass" fehlt, wenn ich nicht darauf verweise. Das führt mich zu der Frage: "Wozu dient der Service-Container, da muss ich noch einmal die gebundene Klasse referenzieren? Was mache ich hier falsch?

Antwort

2

An eine Schnittstelle/einen Vertrag binden, die beide der Swap-fähigen Klassen entsprechen.

interface CustomInterface 
{ 
    public function greeting(); 
} 

class FirstCustomClass implements CustomInterface 
{ 
    public function greeting() 
    { 
     return 'hello world'; 
    } 
} 

class SecondCustomClass implements CustomInterface 
{ 
    public function greeting() 
    { 
     return 'hello world two'; 
    } 
} 

dann in Ihrem Service-Provider binden an Namespace\Of\My\Interface\CustomInterface:class und dann zurückkehren, die jemals Implementierung Sie. wollen

Innerhalb des Controllers sollten Sie Ihre Schnittstelle Abhängigkeit injizieren, die dann am Ende wird die Ihnen die Standardklasse

Dies bedeutet dann, dass Sie schnell eine Klasse für eine andere austauschen können, die die gleiche Schnittstelle hat, oder es einfach beim Testen mockt.

+0

Bearbeitet es wie folgt: https://ibb.co/f5k4BF und es funktioniert. Jetzt ändere ich nur die gebundene Klasse in der "register" -Methode und es gibt die gewünschte Ausgabe. Vielen Dank . – user3102290