Wenn Sie jemals auf das Laravel-Framework gestoßen sind, ist es höchst unwahrscheinlich, dass Sie noch nichts von Service-Containern und Service-Providern gehört haben. In der Tat sind sie das Rückgrat des Laravel-Frameworks und führen alle schweren Lasten aus, wenn Sie eine Instanz einer Laravel-Anwendung starten.
In diesem Artikel erfahren Sie, worum es bei dem Servicebehälter geht. Anschließend werden wir den Serviceprovider im Detail besprechen. Im Verlauf dieses Artikels werde ich außerdem zeigen, wie Sie in Laravel einen benutzerdefinierten Serviceanbieter erstellen. Sobald Sie einen Dienstanbieter erstellt haben, müssen Sie ihn auch bei der Laravel-Anwendung registrieren, um ihn tatsächlich zu verwenden, also werden wir das auch durchgehen.
Es gibt zwei wichtige Methoden, boot und register, die Ihr Dienstanbieter möglicherweise implementiert, und im letzten Abschnitt dieses Artikels werden wir diese beiden Methoden gründlich diskutieren.
Bevor wir in die Diskussion eines Service Providers einsteigen, werde ich versuchen, den Service-Container einzuführen, da er stark in der Implementierung Ihres Service Providers verwendet wird.
Website: https://code.tutsplus.com/de/tutorials/how-to-register-use-laravel-service-providers--cms-28966
Schauen wir uns ein kurzes Beispiel an, um es zu verstehen
<?php
Class SomeClass
{
public function __construct(FooBar $foobarObject)
{
// use $foobarObject object
}
}
Was ist ein Service-Container?
Im einfachsten Fall könnte man sagen, dass der Servicebehälter in Laravel eine Box ist, die die Bindungen verschiedener Komponenten enthält und nach Bedarf in der gesamten Anwendung bedient wird.
In den Worten der offiziellen Laravel-Dokumentation:
Der Laravel-Service-Container ist ein leistungsstarkes Tool zum Verwalten von Klassenabhängigkeiten und zum Durchführen der Abhängigkeitsinjektion.
Wann immer Sie eine integrierte Komponente oder einen integrierten Dienst injizieren müssen, können Sie sie in Ihrem Konstruktor oder in Ihrer Methode angeben und sie wird automatisch aus dem Servicebehälter eingefügt, da sie alles enthält, was Sie brauchen! Ist das nicht cool? Es erspart Ihnen die manuelle Instanziierung der Komponenten und vermeidet so eine enge Kopplung in Ihrem Code.
Wie Sie sehen können, benötigt die SomeClass
eine Instanz von FooBar
, um sich selbst zu instantiieren. Also, im Grunde hat es eine Abhängigkeit, die injiziert werden muss. Laravel erledigt dies automatisch, indem er in den Service-Container schaut und die entsprechende Abhängigkeit eingibt.
Und wenn Sie sich fragen, wie Laravel weiß, welche Komponenten oder Dienste in den Service-Container aufgenommen werden sollen, ist die Antwort der Service-Provider. Es ist der Dienstanbieter, der Laravel anweist, verschiedene Komponenten in den Dienstcontainer zu binden. In der Tat heißt es Service-Container-Bindungen, und Sie müssen es über den Service-Provider tun.
Es ist also der Dienstanbieter, der alle Dienstcontainerbindungen registriert, und zwar über die Registermethode der Implementierung des Dienstanbieters.
Das sollte eine andere Frage auf den Tisch bringen: Woher weiß Laravel von verschiedenen Dienstleistern? Hast du gerade etwas gesagt? Ich habe gerade gehört, dass jemand das sagt, Laravel sollte das auch automatisch herausfinden! Oh Mann, das ist zu viel verlangt: Laravel ist ein Framework, kein Superman, oder? Scherz beiseite, das ist etwas, das du Laravel explizit mitteilen musst.