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 welManager 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 jedriver() 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().
file-driver wordt dus createFileDriver() aangeroepen, en voor de my-custom-driver createMyCustomDriver().
extend() — een custom driver registreren
Door een drivernaam en een closure aanextend() door te geven, kun je je eigen driver registreren. Het argument van de closure is de containerinstantie.
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.
SessionManager::get('key'), terwijl het eigenlijke werk aan de driver wordt overgelaten.
Implementatievoorbeeld: SessionManager
Als jeIlluminate\Session\SessionManager bekijkt, zie je concreet hoe je Manager gebruikt.
Manager gebruiken in je eigen package
Basisimplementatie
We maken een custom klasse die vanManager 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 vanMultipleInstanceManager 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.instance().
Drivercache beheren
Cachebewerkingen van Manager
Cachebewerkingen van MultipleInstanceManager
Samenvatting
Managerbeheert de “soorten” drivers. Je implementeertcreateXxxDriver()-methodes en breidt uit viaextend()MultipleInstanceManagerbeheert “instanties” van drivers per naam. Geschikt voor packages die meerdere verbindingsconfiguraties nodig hebben- Niet elke klasse met
Managerin de naam erft vanIlluminate\Support\Manager.CacheManagerenQueueManagerhebben een eigen implementatie
Macroable-trait
Leer hoe je met de Macroable-trait eigen methodes toevoegt aan bestaande klassen.