Aller au contenu
Nibiru docsv0.9.2

Registre

Comment les modules sont automatiquement découverts et leurs configurations mises en cache pour un accès au moment de l'exécution.

Stable Reading time ~ 2 min Edit on GitHub

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.

Pour chaque module sous application/module/<nom>/settings/ :

  1. Le Registre parcourt les fichiers correspondant à *.ini.
  2. Pour chacun, il tente d’abord le nom de fichier spécifique à l’environnement (<base>.<env>.<ext>, par exemple users.production.ini) ; sinon, il revient au nom de base (users.ini).
  3. Il appelle parse_ini_file($path, true) (multi-section).
  4. Il recherche une section nommée d’après le module, en majuscules — [USERS], [CMS], [ANALYTICS].
  5. Les paires clé/valeur analysées deviennent un \stdClass indexé par le nom du 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;
}
}

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.

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 override

Quand utiliser le Registre par rapport à la Configuration

Section intitulée « Quand utiliser le Registre par rapport à la Configuration »
ConfigRegistry
Sourcesettings.<env>.ini (un seul fichier)INIs par module (plusieurs fichiers)
Portéeconfiguration globale du frameworkconfiguration spécifique au module
Sectionsmixtes (DATABASE, SETTINGS, ENGINE…)une par module
RechercheConfig::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.

$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.

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.

  • 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 *.ini est analysé. Un fichier *.conf ou *.config est ignoré.
  • Le fichier d’environnement écrase silencieusement le fichier de base. Si users.production.ini existe avec [USERS], il écrase complètement users.ini — pas fusionné. Gardez les deux fichiers synchronisés, ou utilisez un seul + une superposition.