Registre
Comment les modules sont automatiquement découverts et leurs configurations mises en cache pour un accès au moment de l'exécution.
Le Registre est le cache de configuration des modules de Nibiru. À l’initialisation, il parcourt chaque répertoire sous application/module/, analyse chaque fichier settings/*.ini des modules et expose la configuration analysée via un seul accesseur. Imaginez-le comme le centre gravitationnel qui maintient les modules en orbite les uns autour des autres.
Comment fonctionne la découverte
Section intitulée « Comment fonctionne la découverte »Pour chaque module sous application/module/<nom>/settings/ :
- Le Registre parcourt les fichiers correspondant à
*.ini. - Pour chacun, il tente d’abord le nom de fichier spécifique à l’environnement (
<base>.<env>.<ext>, par exempleusers.production.ini) ; sinon, il revient au nom de base (users.ini). - Il appelle
parse_ini_file($path, true)(multi-section). - Il recherche une section nommée d’après le module, en majuscules —
[USERS],[CMS],[ANALYTICS]. - Les paires clé/valeur analysées deviennent un
\stdClassindexé par le nom du module.
Lecture de la configuration d’un module
Section intitulée « Lecture de la configuration d’un module »$users = \Nibiru\Registry::getInstance()->loadModuleConfigByName('users');$users->session_lifetime;$users->password_min_length;$users->allowed_roles; / arrayÀ l’intérieur du module lui-même, la convention est d’envelopper cela dans un mutateur :
class Users extends ModuleAdapter implements IModule{ const CONFIG_MODULE_NAME = 'users'; protected static \stdClass $usersRegistry;
protected function setUsersRegistry(): void { self::$usersRegistry = Registry::getInstance() ->loadModuleConfigByName(self::CONFIG_MODULE_NAME); }
public static function lifetime(): int { return (int) self::$usersRegistry->session_lifetime; }}Pourquoi les noms des sections en majuscules ?
Section intitulée « Pourquoi les noms des sections en majuscules ? »Les noms des sections INI sont généralement en majuscules pour les rendre visuellement distincts. Le Registre suppose cela, donc un module appelé cms recherche [CMS]. Toujours en majuscules.
INI multi-module
Section intitulée « INI multi-module »Rien ne vous empêche d’avoir plus d’un fichier INI dans le dossier settings/ d’un module. Le Registre les analyse tous et fusionne tout ce qui correspond à [<MODULE>] dans le même \stdClass. Utile pour diviser les préoccupations :
application/module/users/settings/├── users.ini # [USERS] base config├── users.smtp.ini # [USERS] mail-related keys└── users.production.ini # production overrideQuand utiliser le Registre par rapport à la Configuration
Section intitulée « Quand utiliser le Registre par rapport à la Configuration »Config | Registry | |
|---|---|---|
| Source | settings.<env>.ini (un seul fichier) | INIs par module (plusieurs fichiers) |
| Portée | configuration globale du framework | configuration spécifique au module |
| Sections | mixtes (DATABASE, SETTINGS, ENGINE…) | une par module |
| Recherche | Config::getInstance()->getConfig()['DATABASE']['driver'] | Registry::getInstance()->loadModuleConfigByName('users') |
Un module qui a besoin de lire le pilote [DATABASE] se tourne vers Config. Un module qui a besoin de lire sa propre durée de vie de la session [USERS] se tourne vers Registry.
Liste de tous les modules chargés
Section intitulée « Liste de tous les modules chargés »$registry = \Nibiru\Registry::getInstance();foreach ($registry->getModuleNames() as $name) { $cfg = $registry->loadModuleConfigByName($name); echo "$name → " . print_r($cfg, true) . "\n";}Utile dans un contrôleur de débogage ou un tableau de bord d’administration.
Rechargement des sémantiques
Section intitulée « Rechargement des sémantiques »Comme Config, le Registre est un singleton peuplé une seule fois par requête. Si vous modifiez le fichier INI d’un module, vous devez rafraîchir la requête pour voir les nouvelles valeurs. Il existe une méthode destroy() sur le singleton du Registre si vous avez vraiment besoin de recharger pendant la requête, mais dans les flux normaux, ce n’est pas nécessaire.
Tracas courantes
Section intitulée « Tracas courantes »- Le nom de la section ne correspond pas au dossier du module. Dossier
users/, section attendue[USERS]. Mismatch → configuration vide. - Extension de fichier INI. Seul
*.iniest analysé. Un fichier*.confou*.configest ignoré. - Le fichier d’environnement écrase silencieusement le fichier de base. Si
users.production.iniexiste avec[USERS], il écrase complètementusers.ini— pas fusionné. Gardez les deux fichiers synchronisés, ou utilisez un seul + une superposition.