Skip to main content

Qué es Manager

Illuminate\Support\Manager es una clase abstracta presente en Laravel desde la versión 4.0. Proporciona la base para construir con facilidad sistemas donde puedes alternar entre varios “drivers”, como caché, sesión o correo. Por «driver» entendemos backends que comparten una misma interfaz pero cuya implementación interna difiere. Por ejemplo, en sesiones existen file, cookie, database y redis, y se cambian mediante la clave driver del archivo de configuración.

Uso dentro del framework

No todas las clases con nombre Manager extienden Illuminate\Support\Manager. Aun así, las clases que no lo heredan comparten la idea básica de extenderse con extend(). Entender el patrón Manager te ayudará a comprender cómo funciona el framework en general.

Funcionamiento básico

driver() — obtener un driver

Cuando llamas a driver(), se resuelve siguiendo estos pasos: Si miras el código fuente, verás que el nombre del método se construye a partir del nombre del driver con Str::studly().
Por tanto, el driver file invoca createFileDriver() y el driver my-custom invoca createMyCustomDriver().

extend() — registrar un driver personalizado

Pasando el nombre del driver y una closure a extend(), puedes registrar tu propio driver. El argumento de la closure es la instancia del contenedor.
extend() hace un bind del closure a $this, así que dentro puedes acceder a las propiedades y métodos del Manager.

__call — delegación al driver por defecto

La clase Manager implementa __call, así que cualquier llamada a un método que no exista en el propio Manager se delega automáticamente al driver por defecto.
Esto es lo que permite hacer cosas como SessionManager::get('key'): usas directamente el Manager, pero el trabajo real lo hace el driver.

Ejemplo con SessionManager

Si miras Illuminate\Session\SessionManager, verás claramente cómo se usa Manager.

Usar Manager en tu paquete

Implementación básica

Como ejemplo, creemos una clase de servicio de notificaciones que extiende Manager.
1

Crear una clase que extienda Manager

2

Registrar en un service provider

3

Añadir un driver personalizado

4

Usarlo

MultipleInstanceManager

Illuminate\Support\MultipleInstanceManager es una clase añadida en Laravel 10. Mientras que Manager gestiona «tipos» de driver, MultipleInstanceManager gestiona varias «instancias» con nombre.

Diferencias respecto a Manager

Métodos obligatorios

Al extender MultipleInstanceManager, debes implementar tres métodos.
getInstanceConfig() devuelve el array de configuración correspondiente al nombre. La configuración debe contener siempre la clave driver (o la clave que hayas especificado con $driverKey).

Flujo de resolución

Ejemplo en un paquete propio

Como ejemplo, un paquete que soporta varias gateways SMS a la vez.
Archivo de configuración correspondiente:
En el uso, indica el nombre con instance().
MultipleInstanceManager permite añadir drivers personalizados con extend(), igual que Manager. También implementa __call, así que los métodos que no existen en el propio Manager se delegan a la instancia por defecto.

Gestión de la caché de drivers

Operaciones de caché en Manager

Operaciones de caché en MultipleInstanceManager

Resumen

  • Manager gestiona «tipos» de driver. Implementa los métodos createXxxDriver() y extiende con extend().
  • MultipleInstanceManager gestiona «instancias» de drivers por nombre. Es adecuado para paquetes que necesitan varias configuraciones de conexión.
  • No todas las clases con nombre Manager extienden Illuminate\Support\Manager. CacheManager y QueueManager tienen implementaciones propias.

Trait Macroable

Aprende cómo usar el trait Macroable para añadir métodos propios a clases existentes.
Última modificación el 13 de julio de 2026