Was ist Manager?
Illuminate\Support\Manager ist eine abstrakte Klasse, die es seit Laravel 4.0 gibt. Sie stellt die Grundlage bereit, um Systeme zu bauen, in denen sich verschiedene „Treiber” für Cache, Session, Mail usw. einfach austauschen lassen.
Ein „Treiber” ist ein Backend mit gleicher Schnittstelle, aber unterschiedlicher interner Implementierung. Bei Sessions z. B. gibt es die Treiber file, cookie, database, redis — umgeschaltet wird über den driver-Key in der Konfigurationsdatei.
Verwendung im Framework
Nicht jede Klasse mit dem NamenManager erbt tatsächlich von Illuminate\Support\Manager.
Auch die nicht erbenden Klassen folgen demselben Grundprinzip der Erweiterung über
extend(). Wer das Manager-Muster versteht, versteht daher auch weite Teile des Frameworks.
Grundlegende Funktionsweise
driver() — einen Treiber ermitteln
Der Aufruf vondriver() löst den Treiber in folgender Reihenfolge auf.
Im tatsächlichen Quellcode wird der Methodenname aus dem Treibernamen per Str::studly() zusammengesetzt.
file-Treiber ruft also createFileDriver(), der Treiber my-custom ruft createMyCustomDriver().
extend() — einen eigenen Treiber registrieren
Übergeben Sie anextend() den Treibernamen und eine Closure, um einen eigenen Treiber zu registrieren. Als Argument erhält die Closure die Container-Instanz.
extend() bindet die Closure an $this, sodass Sie in ihr auf Properties und Methoden des Managers zugreifen können.
__call — Delegation an den Default-Treiber
Manager implementiert __call; Methodenaufrufe, die es am Manager selbst nicht gibt, werden automatisch an den Default-Treiber delegiert.
SessionManager::get('key') direkt am Manager aufrufen — die tatsächliche Arbeit erledigt der Treiber.
Beispielimplementierung SessionManager
Ein Blick inIlluminate\Session\SessionManager zeigt die praktische Verwendung von Manager.
Manager in einem eigenen Paket verwenden
Grundlegende Implementierung
Als Beispiel bauen wir einen Benachrichtigungsdienst als vonManager abgeleitete Klasse.
1
Von Manager ableitende Klasse erstellen
2
Im Service Provider registrieren
3
Einen eigenen Treiber ergänzen
4
Nutzung
MultipleInstanceManager
Illuminate\Support\MultipleInstanceManager wurde in Laravel 10 hinzugefügt. Während Manager die „Art” eines Treibers verwaltet, kann MultipleInstanceManager mehrere benannte „Instanzen” verwalten.
Unterschiede zu Manager
Pflichtmethoden
Wer vonMultipleInstanceManager ableitet, muss drei Methoden implementieren.
getInstanceConfig() gibt das Konfigurationsarray zu einem Namen zurück. Die Konfiguration muss zwingend den Schlüssel driver (bzw. den mit $driverKey gesetzten Namen) enthalten.
Auflösungsablauf
Beispielimplementierung in einem eigenen Paket
Als Beispiel ein Paket, das mehrere SMS-Gateways parallel bedient.instance() mit einem Namen.
Verwaltung des Treiber-Caches
Cache-Operationen von Manager
Cache-Operationen von MultipleInstanceManager
Fazit
Managerverwaltet die „Art” eines Treibers. Sie implementierencreateXxxDriver()-Methoden und erweitern perextend().MultipleInstanceManagerverwaltet „Instanzen” eines Treibers nach Name. Passend für Pakete mit mehreren Verbindungskonfigurationen.- Nicht jede Klasse mit dem Namen
Managererbt vonIlluminate\Support\Manager.CacheManagerundQueueManagersind eigene Implementierungen.
Macroable-Trait
Lernen Sie den Macroable-Trait kennen, mit dem Sie bestehenden Klassen eigene Methoden hinzufügen.