2017-01-25 1 views
1

Ich bin verwirrt darüber, warum wir Konstruktor brauchen und kann mir jemand von meinem Controller diesen Code erklären:Konstrukt Methode in PHP Laravel ist nicht so klar für mich

public function __construct(MerchantService $merchantService, PaymentService $paymentService){ 
    $this->merchantService = $merchantService; 
    $this->paymentService = $paymentService; 
} 

ich auf einem Admin-Panel arbeite mit Laravel. und unser Chef will die stucture so sein:

Controller -> Service -> Repository -> modal -> Datenbank

es ist ziemlich geradlinig, wenn ich diesen Weg gehen:

Controller -> Modal -> Datenbank.

aber ich muss dem ersten folgen. Der obige Code ist ein Beispiel von der Steuerung

im obigen Code gibt es 2 Dienste, MerchantService und PaymentService. aber ich verstehe nicht, was genau der Konstruktor mit der Variable Merchant service Variable und Zahlung als Parameter tut, initiiert es ein Objekt Merchant service und PaymentService?

Antwort

1

Der Laravel-Servicebehälter ist ein leistungsstarkes Tool zum Verwalten von Klassenabhängigkeiten und zum Durchführen der Abhängigkeitsinjektion. Dependency-Injection ist eine Fancy-Phrase, die im Wesentlichen Folgendes bedeutet: Klassenabhängigkeiten werden über den Konstruktor oder in einigen Fällen durch "Setter" -Methoden in die Klasse "injiziert".

public function __construct(UserRepository $users) 
{ 
    $this->users = $users; 
} 

In diesem Beispiel muss der Benutzer Usercontroller aus einer Datenquelle abzurufen. Wir werden also einen Dienst bereitstellen, der Benutzer abrufen kann. In diesem Kontext verwendet unser UserRepository wahrscheinlich Eloquent, um Benutzerinformationen aus der Datenbank abzurufen. Da das Repository jedoch injiziert wird, können wir es leicht mit einer anderen Implementierung austauschen. Wir sind auch in der Lage, einfach nachzuahmen oder eine Dummy-Implementierung des UserRepository zu erstellen, wenn wir unsere Anwendung testen.

https://laravel.com/docs/5.3/container

+0

thx Alexey Mezenin. Können Sie mir ein wenig erklären, wenn ich dies für die Benutzeranmeldung tun möchte: UserLoginController -> LoginService -> LoginReposity. – Mikethetechy

+0

@MohamedManas Ich würde Ihnen empfehlen, [Laravel integriertes Authentifizierungsgerüst] zu verwenden (https://laravel.com/docs/5.3/authentication#introduction) Sie müssen dafür kein Repository oder einen Dienst erstellen. –

+0

Ja, dein Recht, mit dem eingebauten Auth, wird der ganze Prozess viel einfacher, ich habe es so am Anfang gemacht ... aber sie wollen, dass ich durch diese Struktur gehe :(.. UserLoginController -> LoginService -> Loginrepository - > DB, deshalb bin ich fest – Mikethetechy

0

Dies ist ein Design-Muster, es heißt depedency injection.
Dies ist eine gute Möglichkeit zu arbeiten, so dass Sie problemlos Tests schreiben oder die Dienste ändern können und mehr.

Sie können weitere Informationen über dependecy injectionhere on SO itself oder here on wikipedia lesen.

+0

thx für die Info ... der Link spricht über das Repository von der Steuerung ... im noch verwirrt .. wie zum Beispiel, wenn ich eine UserLoginController und ich brauche, um dies zu tun: UserLoginController-> LoginService-> LoginRepository-> modal. Nach dem Modal bekomme ich einfach Daten in die Datenbank ... aber wie gehe ich von UserLoginController bis LoginRepository vor? sorry für die Ignoranz ... – Mikethetechy