Skip to main content

Wat is Manager?

Illuminate\Support\Manager is een abstracte klasse die al sinds Laravel 4.0 bestaat. Ze biedt de basis om eenvoudig systemen te bouwen waarin je tussen meerdere “drivers” kunt wisselen, zoals cache, sessies en mail. Een “driver” is een backend met dezelfde interface maar een andere interne implementatie. Voor sessies bestaan er bijvoorbeeld drivers zoals file, cookie, database en redis, en je wisselt ertussen via de driver-sleutel in het configuratiebestand.

Gebruik binnen het framework

Er bestaan klassen die wel Manager in hun naam hebben, maar niet van Illuminate\Support\Manager erven. Ook de klassen die er niet van erven volgen hetzelfde basisidee van uitbreiden via extend(). Wie het Manager-patroon begrijpt, begrijpt daarmee ook hoe het framework als geheel werkt.

Hoe het in de basis werkt

driver() — een driver ophalen

Als je driver() aanroept, wordt de driver in de volgende stappen opgelost. Als je de daadwerkelijke broncode bekijkt, wordt de methodenaam samengesteld uit de drivernaam via Str::studly().
Voor de file-driver wordt dus createFileDriver() aangeroepen, en voor de my-custom-driver createMyCustomDriver().

extend() — een custom driver registreren

Door een drivernaam en een closure aan extend() door te geven, kun je je eigen driver registreren. Het argument van de closure is de containerinstantie.
Omdat extend() de closure aan $this bindt, heb je binnen de closure toegang tot de properties en methodes van de Manager.

__call — delegatie naar de standaarddriver

De Manager-klasse implementeert __call, waardoor methodeaanroepen die niet op de Manager zelf bestaan automatisch worden gedelegeerd naar de standaarddriver.
Zo kun je de Manager rechtstreeks gebruiken, zoals SessionManager::get('key'), terwijl het eigenlijke werk aan de driver wordt overgelaten.

Implementatievoorbeeld: SessionManager

Als je Illuminate\Session\SessionManager bekijkt, zie je concreet hoe je Manager gebruikt.

Manager gebruiken in je eigen package

Basisimplementatie

We maken een custom klasse die van Manager erft, met een notificatieservice als voorbeeld.
1

Maak een klasse die van Manager erft

2

Registreer in een service provider

3

Voeg een custom driver toe

4

Gebruik hem

MultipleInstanceManager

Illuminate\Support\MultipleInstanceManager is een klasse die in Laravel 10 is toegevoegd. Waar Manager de “soorten” drivers beheert, kan MultipleInstanceManager meerdere benoemde “instanties” beheren.

Verschillen met Manager

Verplichte methodes

Als je van MultipleInstanceManager erft, moet je drie methodes implementeren.
getInstanceConfig() geeft de configuratie-array terug die bij de naam hoort. De configuratie moet altijd een driver-sleutel bevatten (of de sleutel die je via $driverKey hebt opgegeven).

Resolutieflow

Implementatievoorbeeld in je eigen package

Als voorbeeld nemen we een package dat gelijktijdig meerdere sms-gateways ondersteunt.
Het bijbehorende configuratiebestand:
Bij gebruik geef je de naam op via instance().
Aan MultipleInstanceManager kun je, net als bij Manager, custom drivers toevoegen via extend(). Ook __call is geïmplementeerd, dus methodes die niet op de instantie zelf bestaan worden gedelegeerd naar de standaardinstantie.

Drivercache beheren

Cachebewerkingen van Manager

Cachebewerkingen van MultipleInstanceManager

Samenvatting

  • Manager beheert de “soorten” drivers. Je implementeert createXxxDriver()-methodes en breidt uit via extend()
  • MultipleInstanceManager beheert “instanties” van drivers per naam. Geschikt voor packages die meerdere verbindingsconfiguraties nodig hebben
  • Niet elke klasse met Manager in de naam erft van Illuminate\Support\Manager. CacheManager en QueueManager hebben een eigen implementatie

Macroable-trait

Leer hoe je met de Macroable-trait eigen methodes toevoegt aan bestaande klassen.
Laatst gewijzigd op 6 september 2026