Wie funktionieren Dienstanbieter und Dienstcontainer mit Laravel?
Veröffentlicht: 2022-09-16Laravel kann manchmal selbst für erfahrene Entwickler sehr schwer zu handhaben sein, da die Kernfunktionalität schwer zu verstehen ist. Aber in der Tat ist Webentwicklung interessant.
Eine der Funktionalitäten sind die Dienstanbieter, über die ich in diesem Blog einen detaillierten Überblick geben werde. Ich werde in diesem Blog auch erklären, wie ein Service-Container in Laravel funktioniert.
Diese sind einfacher, als Sie sich vielleicht vorgestellt haben. Nachdem wir das gesagt haben, lassen Sie uns direkt darauf eingehen.
Was sind Dienstleister in Laravel?
Die Dienstanbieter in einer Laravel-Anwendung dienen als Kernpunkt, von dem aus die Anwendung gebootstrapped wird. Infolgedessen werden Anbieter verwendet, um die grundlegenden Dienste von Laravel in den Dienstcontainer sowie die Dienste, Klassen und ihre Abhängigkeiten unserer Anwendung in den Dienstcontainer einzufügen.
Der Anbieter für dieses Beispiel kann in config/app.php als Array namens „providers“ gefunden werden. Siehe folgendes Bild:
Angenommen, Sie möchten einen beliebigen Drittanbieter von Diensten verwenden, dann müssen Sie sich in der Konfiguration des Dienstanbieter-Arrays bewerben.
Sie können sehen, dass einige Dienstanbieter bereits die gesamte Anwendung ausführen, z. B. Auth, das für die Authentifizierung für die Anwendung erforderlich ist.
Wie erstelle ich Dienstanbieter in Laravel?
Um einen Dienstanbieter zu verwenden, müssen Sie zunächst einen erstellen. Daher richten wir gleich einen Dienstleister ein. Sie können den unten angegebenen Befehl verwenden, um einen beliebigen Dienstanbieter zu erstellen, den Sie benötigen.
php artisan make:provider MyServiceProvider
Wenn Sie den Befehl ausführen, wird in Ihrer Anwendung ein Dienstanbieter erstellt, den Sie dann verwenden können.
Öffnen Sie danach Ihre App und navigieren Sie zum Anbieterordner, in dem Sie Ihren Dienstanbieter finden.
Hier sehen Sie zwei Methoden, register() und boot().
Die Methode register()
Es ist sehr wichtig zu wissen, dass die Methode register() es uns ermöglicht, Bindungen zu unserem Service-Container zu definieren. Siehe zum Beispiel den folgenden Code:
$this->app ist eine globale Variable in Laravel, die über die App auf eine Singleton-Klasse zugreifen kann.
Singleton ist eine Eigenschaft. Wenn Sie diese Eigenschaft anwenden, informieren Sie die Anwendung, dass jede Klasse, die als Parameter in der App gesendet wird, in der gesamten Anwendung nur ein Duplikat (Instanz) haben sollte. Das bedeutet, dass MyClass einmal aufgelöst wird und nur eine Instanz hat, auf die über die Variable my_class zugegriffen werden kann.
Die boot()-Methode
Mit der Methode boot() können Sie auf alle Dienste zugreifen, die zuvor mit der Methode register registriert wurden. Auf diese Weise können Sie also den gesamten Service in Ihre Anwendung einbinden.
Wie registriere ich einen Dienstanbieter?
Da Sie nun Ihren Dienstanbieter erstellt haben, müssen Sie ihn in Ihrer Konfigurationsdatei registrieren, um den Vorgang abzuschließen. Sie müssen sich hier auf die im Bild unten dargestellte Weise registrieren:

Alle Dienstanbieter werden jedes Mal zuerst geladen, wenn die Anwendung ausgeführt wird. Dienstanbieter sind der wichtigste zentrale Ort für Laravel-Anwendungen, und sie sind immer da, um Sie beim Ausführen der vollständigen Anwendung zu unterstützen, wie zuvor in diesem Blog besprochen.
Was sind Servicecontainer in Laravel?
Der Service Container ist ein leistungsstarker Mechanismus, der es uns ermöglicht, alle Bindungen zu speichern, die zum Ausführen einer Laravel-Anwendung auf einem einzelnen Server erforderlich sind.
Alles in der Anwendung kann mit Hilfe eines Dienstcontainers zusammengebunden werden.
Wie verwende ich Servicecontainer in Laravel?
Stellen Sie sich das folgende Szenario vor: Wir haben eine Klasse namens MathService, die für bestimmte grundlegende Operationen wie Addition, Multiplikation usw. verantwortlich ist. Der Code für diese Klasse ist unten angegeben.
Wie Sie oben sehen können, gibt es zwei Methoden zum Berechnen des Zahlensummen-Arrays mit der Array-Summenfunktion und zum Multiplizieren aller als Array bereitgestellten Zahlen mit der Array-Produktfunktion.
Die Array-Summenfunktion berechnet die Summe der Zahlen des Arrays mithilfe der Array-Summenfunktion, während die Array-Produktfunktion alle als Array bereitgestellten Zahlen multipliziert.
Um den Dienstanbieter zu verwenden, müssen wir zuerst den Dienst an den Dienstcontainer binden.
Auf diese Weise weisen wir Laravel jedoch an, den MathService-Container im Container mit dem Namen MathService zu behalten und ihn immer dann zurückzugeben, wenn wir eine Instanz einer Klasse benötigen. Dies ist eine einmalige Bindung einer Klasse und kann verwendet werden, um eine beliebige Anzahl von Instanzen aus unserem Programm zu erhalten.
Wie bereits erwähnt, sind Servicecontainer und -anbieter kritische Komponenten jeder Laravel-Anwendung. Wie bereits erwähnt, können wir unsere eigenen einzigartigen Dienstanbieter entwerfen oder Drittanbieter in unsere Anwendungen integrieren.
Wenn Sie beispielsweise Socialite in Laravel verwenden möchten, können Sie es einfach kopieren und in die Datei des App-Dienstanbieters einfügen und überall in Ihrer Anwendung verwenden.
Zusammenfassend
Bei der Konfiguration Ihrer Anwendung werden Dienstleister eingesetzt. Zusätzlich zu den Dienstcontainerbindungen werden in diesem Abschnitt der Konfigurationsdatei auch andere Schlüsselelemente wie Routen, Middleware und Ereignis-Listener registriert.
Die Dienstanbieter werden ausgeführt, bevor die Anfrage selbst verarbeitet wird, um sicherzustellen, dass alles, was Sie wollen, vorhanden und eingerichtet ist, bevor die Anfrage vom System bearbeitet wird. Die Ausführung einiger Dienstanbieter erfolgt regelmäßig, während andere Dienstanbieter nur dann ausgeführt werden, wenn sie erforderlich sind („verzögerte Anbieter“).
Wenn Sie einen Dienstcontainer verwenden, können Sie ihn für Abhängigkeitsinjektion (z. B. Parameterinjektion in Ihre Controller-Klassen) sowie für Bindungs- und Auflösungsklassen (z. B. welche Klasse für einen bestimmten Vertrag instanziiert werden soll) verwenden.
Die Webentwicklung kann ein schwieriger Prozess sein. Aus diesem Grund verfügt webdew über ein Team erfahrener Webentwickler, die Ihnen bei der Erstellung von Websites und Anwendungen helfen und Ihnen die Arbeit erleichtern.
Brauchen Sie Hilfe bei Webdesign und Webentwicklung? Nehmen Sie Kontakt mit uns auf!
Herausgeber: Amrutha