Skip to main content

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 Namen Manager 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 von driver() löst den Treiber in folgender Reihenfolge auf. Im tatsächlichen Quellcode wird der Methodenname aus dem Treibernamen per Str::studly() zusammengesetzt.
Der file-Treiber ruft also createFileDriver(), der Treiber my-custom ruft createMyCustomDriver().

extend() — einen eigenen Treiber registrieren

Übergeben Sie an extend() 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.
Dadurch können Sie SessionManager::get('key') direkt am Manager aufrufen — die tatsächliche Arbeit erledigt der Treiber.

Beispielimplementierung SessionManager

Ein Blick in Illuminate\Session\SessionManager zeigt die praktische Verwendung von Manager.

Manager in einem eigenen Paket verwenden

Grundlegende Implementierung

Als Beispiel bauen wir einen Benachrichtigungsdienst als von Manager 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 von MultipleInstanceManager 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.
Zugehörige Konfigurationsdatei:
Die Nutzung erfolgt über instance() mit einem Namen.
Wie Manager kann auch MultipleInstanceManager über extend() um eigene Treiber erweitert werden. Es implementiert ebenfalls __call, sodass unbekannte Methoden an die Default-Instanz delegiert werden.

Verwaltung des Treiber-Caches

Cache-Operationen von Manager

Cache-Operationen von MultipleInstanceManager

Fazit

  • Manager verwaltet die „Art” eines Treibers. Sie implementieren createXxxDriver()-Methoden und erweitern per extend().
  • MultipleInstanceManager verwaltet „Instanzen” eines Treibers nach Name. Passend für Pakete mit mehreren Verbindungskonfigurationen.
  • Nicht jede Klasse mit dem Namen Manager erbt von Illuminate\Support\Manager. CacheManager und QueueManager sind eigene Implementierungen.

Macroable-Trait

Lernen Sie den Macroable-Trait kennen, mit dem Sie bestehenden Klassen eigene Methoden hinzufügen.
Zuletzt geändert am 13. Juli 2026