Was sind Service-Provider
Service-Provider sind der zentrale Ort, an dem eine gesamte Laravel-Anwendung gebootstrapt wird. Sowohl Ihre eigene Anwendung als auch alle Kernservices von Laravel werden über Service-Provider gebootstrapt. Unter „Bootstrapping” versteht man das Registrieren unterschiedlichster Dinge, etwa Bindings im Service-Container, Event-Listener, Middleware und Routen. Service-Provider sind also die zentrale Stelle, an der Sie Ihre Anwendung konfigurieren. Intern verwendet Laravel zahlreiche Service-Provider, um Kerndienste wie Mailer, Queue und Cache zu bootstrappen. Viele davon sind „deferred provider” (verzögerte Provider): Sie werden nicht bei jedem Request geladen, sondern erst dann, wenn der von ihnen bereitgestellte Dienst tatsächlich benötigt wird. Alle benutzerdefinierten Service-Provider werden in der Dateibootstrap/providers.php registriert.
Wenn Sie genauer verstehen möchten, wie Laravel Anfragen verarbeitet, sehen Sie sich die Dokumentation zum Request-Lebenszyklus an.
Einen Service-Provider schreiben
Jeder Service-Provider erweitert die KlasseIlluminate\Support\ServiceProvider. Die meisten Service-Provider besitzen eine register- und eine boot-Methode.
Um einen neuen Provider zu erzeugen, verwenden Sie den Artisan-Befehl make:provider. Laravel registriert den neuen Provider automatisch in bootstrap/providers.php.
Die register-Methode
Innerhalb der register-Methode sollten Sie ausschließlich Bindings im Service-Container registrieren. Registrieren Sie in register keine Event-Listener, Routen oder andere Funktionen. Andernfalls könnten Sie versehentlich einen Service verwenden, der von einem noch nicht geladenen Service-Provider bereitgestellt wird.
$this->app jederzeit auf den Service-Container zugreifen.
Die Eigenschaften bindings und singletons
Wenn Sie viele einfache Bindings registrieren, können Sie statt jedes Binding einzeln zu registrieren die Eigenschaften bindings und singletons nutzen. Beim Laden des Service-Providers prüft das Framework diese Eigenschaften automatisch und registriert die Bindings.
Die boot-Methode
Wenn Sie innerhalb eines Service-Providers einen View-Composer registrieren möchten, tun Sie dies in der boot-Methode. Diese Methode wird erst aufgerufen, nachdem alle anderen Service-Provider registriert wurden. Sie haben daher Zugriff auf alle vom Framework registrierten Dienste.
Dependency Injection in boot
Auch in der boot-Methode können Sie Abhängigkeiten per Type-Hint entgegennehmen. Der Service-Container injiziert die benötigten Abhängigkeiten automatisch.
Service-Provider registrieren
Alle Service-Provider werden in der Dateibootstrap/providers.php registriert. Diese Datei gibt ein Array mit den Klassennamen der Service-Provider Ihrer Anwendung zurück.
In Laravel 13 registrieren Sie Service-Provider nicht mehr im
providers-Array von config/app.php, sondern in bootstrap/providers.php. Beim Verwenden des Befehls make:provider erfolgt der Eintrag automatisch.make:provider verwenden, trägt Laravel den Provider automatisch in die Datei ein. Erstellen Sie die Provider-Klasse manuell, müssen Sie den Klassennamen selbst in das Array eintragen.
Einen eigenen Service-Provider erstellen
Erstellen wir nun praktisch einen eigenen Service-Provider.In der register-Methode binden
Tragen Sie die Bindings in die
register-Methode des erzeugten Providers ein.Deferred Providers (verzögerte Provider)
Wenn ein Provider ausschließlich Bindings im Service-Container registriert, kann die Registrierung so lange verzögert werden, bis eines dieser Bindings tatsächlich benötigt wird. Da solche Provider nicht bei jedem Request vom Dateisystem geladen werden müssen, verbessert sich die Performance Ihrer Anwendung. Um einen deferred Provider anzulegen, implementieren Sie das Interface\Illuminate\Contracts\Support\DeferrableProvider und definieren die Methode provides. Die Methode provides gibt die vom Provider registrierten Container-Bindings zurück.
Nächste Schritte
Service-Container
Sehen Sie sich die Funktionsweise des Service-Containers und die Details der Bindings an.