Skip to main content

Cos’è Manager

Illuminate\Support\Manager è una classe astratta presente fin da Laravel 4.0. Fornisce la base per costruire facilmente sistemi in cui è possibile alternare più “driver” — per cache, sessioni, mail e altro. Un “driver” è un backend che espone la stessa interfaccia ma cambia implementazione internamente. Per la sessione, ad esempio, esistono i driver file, cookie, database, redis, e si commuta tramite la chiave driver del file di configurazione.

Come è utilizzato nel framework

Ci sono classi che hanno “Manager” nel nome ma non ereditano da Illuminate\Support\Manager. Le classi che non estendono Manager condividono comunque l’idea di base di estendersi tramite extend(). Comprendere il pattern Manager aiuta quindi a capire il funzionamento di tutto il framework.

Meccanismo di base

driver() — ottenere un driver

Chiamando driver(), il driver viene risolto secondo questi passaggi. Nel codice sorgente vedi che il nome del metodo viene composto dal nome del driver con Str::studly().
Quindi al driver file corrisponde createFileDriver(), al driver my-custom corrisponde createMyCustomDriver().

extend() — registrare un driver personalizzato

Passando a extend() un nome di driver e una closure, puoi registrare un driver personalizzato. L’argomento della closure è l’istanza del container.
extend() collega la closure a $this, quindi all’interno della closure puoi accedere alle proprietà e ai metodi del Manager.

__call — delega al driver di default

La classe Manager implementa __call: le chiamate a metodi che non esistono sul Manager stesso vengono automaticamente delegate al driver di default.
Così SessionManager::get('key') usa direttamente il Manager, ma l’elaborazione effettiva è a carico del driver.

Esempio: implementazione di SessionManager

Guardando Illuminate\Session\SessionManager si capisce concretamente come si usa Manager.

Usare Manager in un pacchetto proprio

Implementazione di base

Come esempio, creiamo una classe personalizzata che estende Manager per un servizio di notifica.
1

Creare la classe che estende Manager

2

Registrare nel service provider

3

Aggiungere un driver personalizzato

4

Utilizzare

MultipleInstanceManager

Illuminate\Support\MultipleInstanceManager è una classe introdotta in Laravel 10. Mentre Manager gestisce “tipi” di driver, MultipleInstanceManager gestisce più “istanze” con nome.

Differenze rispetto a Manager

Metodi obbligatori

Estendendo MultipleInstanceManager devi implementare tre metodi.
getInstanceConfig() restituisce l’array di configurazione associato al nome. La configurazione deve sempre includere driver (o la chiave indicata da $driverKey).

Flusso di risoluzione

Esempio di implementazione in un pacchetto proprio

Prendiamo come esempio un pacchetto che supporta contemporaneamente più gateway SMS.
File di configurazione corrispondente:
In fase di utilizzo indichi il nome con instance().
MultipleInstanceManager, come Manager, permette di aggiungere driver personalizzati con extend(). Implementa anche __call, quindi i metodi assenti sull’istanza vengono delegati a quella di default.

Gestione della cache dei driver

Operazioni di cache in Manager

Operazioni di cache in MultipleInstanceManager

  • Manager gestisce i “tipi” di driver. Implementi i metodi createXxxDriver() ed estendi con extend()
  • MultipleInstanceManager gestisce le “istanze” di driver per nome. È adatto a pacchetti che richiedono più configurazioni di connessione
  • Non tutte le classi chiamate Manager estendono Illuminate\Support\Manager. CacheManager e QueueManager sono implementazioni indipendenti

Trait Macroable

Impara come aggiungere metodi personalizzati alle classi esistenti con il trait Macroable.
Ultima modifica il 13 luglio 2026