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éesManager 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().
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.
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 deManager.
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 deMultipleInstanceManager, 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.instance().
Gestion du cache de drivers
Manipulation du cache dans Manager
Manipulation du cache dans MultipleInstanceManager
Résumé
Managergère les « types » de drivers. Implémentez des méthodescreateXxxDriver()et étendez avecextend().MultipleInstanceManagergère les « instances » de drivers nommées. Adapté aux packages nécessitant plusieurs configurations de connexion.- Toutes les classes nommées
Managern’héritent pas deIlluminate\Support\Manager.CacheManageretQueueManageront leur propre implémentation.
Trait Macroable
Découvrez l’utilisation du trait Macroable pour ajouter des méthodes personnalisées aux classes existantes.