Skip to main content

Qu’est-ce que Manager

Illuminate\Support\Manager est une classe abstraite présente depuis Laravel 4.0. Elle fournit les fondations permettant de construire simplement un système capable de basculer entre plusieurs « drivers », comme le cache, la session ou le mail. Un « driver » est un backend qui présente la même interface mais dont l’implémentation interne diffère. Par exemple, pour la session, on trouve les drivers file, cookie, database ou redis, sélectionnés via la clé driver du fichier de configuration.

Utilisation dans le framework

Toutes les classes appelées Manager n’héritent pas de Illuminate\Support\Manager. Les classes qui n’en héritent pas suivent tout de même la même logique fondamentale d’extension via extend(). Comprendre le pattern Manager aide donc à comprendre le fonctionnement de tout le framework.

Principe de base

driver() — obtenir un driver

L’appel à driver() résout un driver selon les étapes suivantes. Dans le code source, le nom de la méthode est construit à partir du nom du driver via Str::studly().
Autrement dit, le driver file appelle createFileDriver() et le driver my-custom appelle createMyCustomDriver().

extend() — enregistrer un driver personnalisé

Vous pouvez enregistrer votre propre driver en passant un nom et une closure à extend(). La closure reçoit l’instance du conteneur en argument.
extend() lie la closure à $this, ce qui permet d’accéder aux propriétés et méthodes du Manager depuis la closure.

__call — délégation au driver par défaut

La classe Manager implémente __call. Les appels de méthodes qui n’existent pas sur le Manager lui-même sont automatiquement délégués au driver par défaut.
C’est ce qui permet d’écrire SessionManager::get('key') en utilisant directement le Manager, tout en confiant le traitement effectif au driver.

Exemple d’implémentation : SessionManager

Illuminate\Session\SessionManager illustre concrètement l’utilisation de Manager.

Utiliser Manager dans un package maison

Implémentation de base

Prenons un service de notifications pour créer une classe personnalisée héritant de Manager.
1

Créer une classe qui hérite de Manager

2

Enregistrer via un service provider

3

Ajouter un driver personnalisé

4

Utilisation

MultipleInstanceManager

Illuminate\Support\MultipleInstanceManager est une classe ajoutée dans Laravel 10. Là où Manager gère les « types » de drivers, MultipleInstanceManager gère plusieurs « instances » nommées.

Différences avec Manager

Méthodes obligatoires

Pour hériter de MultipleInstanceManager, il faut implémenter trois méthodes.
getInstanceConfig() renvoie le tableau de configuration associé au nom. Ce tableau doit obligatoirement contenir la clé driver (ou la clé spécifiée par $driverKey).

Flot de résolution

Exemple d’implémentation dans un package maison

Prenons l’exemple d’un package prenant en charge simultanément plusieurs passerelles SMS.
Fichier de configuration correspondant :
Utilisation : on désigne le nom via instance().
MultipleInstanceManager permet, comme Manager, d’ajouter des drivers personnalisés via extend(). Il implémente aussi __call, si bien que les méthodes absentes de l’instance elle-même sont déléguées à l’instance par défaut.

Gestion du cache de drivers

Manipulation du cache dans Manager

Manipulation du cache dans MultipleInstanceManager

Résumé

  • Manager gère les « types » de drivers. Implémentez des méthodes createXxxDriver() et étendez avec extend().
  • MultipleInstanceManager gère les « instances » de drivers nommées. Adapté aux packages nécessitant plusieurs configurations de connexion.
  • Toutes les classes nommées Manager n’héritent pas de Illuminate\Support\Manager. CacheManager et QueueManager ont leur propre implémentation.

Trait Macroable

Découvrez l’utilisation du trait Macroable pour ajouter des méthodes personnalisées aux classes existantes.
Dernière modification le 13 juillet 2026