Aller au contenu
Nibiru docsv0.9.2

Configuration et paramètres

Comment Nibiru charge la configuration à partir des fichiers INI spécifiques à l'environnement.

Stable Reading time ~ 2 min Edit on GitHub

La couche de configuration de Nibiru est intentionnellement simple : elle analyse un seul fichier settings.<env>.ini au démarrage, l’expose via un singleton, et laisse aux modules ajouter leurs propres INIs à travers le Registry.

La variable d’environnement APPLICATION_ENV sélectionne le fichier à charger :

APPLICATION_ENVFichier chargé
développement (par défaut)application/settings/config/settings.development.ini
pré-productionapplication/settings/config/settings.staging.ini
productionapplication/settings/config/settings.production.ini
Fenêtre de terminal
export APPLICATION_ENV=production
./nibiru -mi production

Si APPLICATION_ENV n’est pas défini, Nibiru par défaut à développement.

Un fichier settings.<env>.ini typique :

[ENGINE]
templates = "/../../application/view/templates/"
templates_c = "/../../application/view/templates_c/"
cache = "/../../application/view/cache/"
config_dir = "/../../application/view/configs/"
caching = false
debug = true
error.controller = "error"
[AUTOLOADER]
iface.pos[] = "users"
iface.pos[] = "cms"
class.pos[] = "users"
class.pos[] = "cms"
[SETTINGS]
page.url = "https://my-app.local"
navigation = "/../../application/settings/config/navigation/main.json"
modules.path = "/../../application/module/"
entries.per.page = 25
smarty.css[] = "/public/css/app.css"
smarty.js[] = "/public/js/app.js"
timezone = "Europe/Vienna"
[DATABASE]
driver = "pdo"
hostname = "localhost"
port = 3306
username = "nibiru"
password = "secret"
basename = "nibiru_dev"
encoding = "utf8mb4"
is.active = true
[SECURITY]
password_hash = "change-me-at-once"
[GENERATOR]
database = true
database.overwrite = true
[EMAIL]
host = "smtp.example.com"
port = 587
encryption = "tls"
username = "noreply@example.com"
password = "smtp-secret"
from = "Nibiru <noreply@example.com>"
[NIBIRU_ROUTING]
; optional regex routes — see /core/routing/
[NIBIRU_SECURITY]
password_hash = "another-salt-for-AES_DECRYPT"
$cfg = \Nibiru\Config::getInstance()->getConfig();
$cfg['DATABASE']['driver']; / 'pdo'
$cfg['SETTINGS']['page.url']; / 'https://my-app.local'

Pour les configurations profondément imbriquées, utilisez les constantes typées de l’interface View :

$cfg[\Nibiru\View::NIBIRU_SETTINGS]['smarty.css']; / ['/public/css/app.css']

Chaque module situé sous application/module/<nom>/settings/ peut posséder ses propres fichiers INI. Le Registre les détecte automatiquement et les expose via :

$users = \Nibiru\Registry::getInstance()->loadModuleConfigByName('users');
$users->session_lifetime; / from [USERS] section in users.ini

Le Registre préfère <module>.<env>.ini par rapport à <module>.ini, donc vous obtenez des remplacements par environnement gratuitement.

Les fichiers INI sont du texte brut. Deux options sûres pour la production :

Gardez settings.production.ini dans le contrôle de version avec des espaces réservés, et injectez les valeurs réelles à partir des variables d’environnement au moment de l’exécution :

[DATABASE]
password = "${DB_PASSWORD}"

Puis développez-les dans votre conteneur/CI :

Fenêtre de terminal
envsubst < settings.production.ini.tpl > settings.production.ini

Gardez settings.production.ini à l’extérieur du dépôt et créez un lien symbolique lors du déploiement :

Fenêtre de terminal
ln -s /etc/nibiru/settings.production.ini \
application/settings/config/settings.production.ini

Le framework n’importe pas où se trouve le fichier, du moment que parse_ini_file peut le lire.

La configuration est lue une seule fois au démarrage, dans la variable statique Settings. Les modifications du fichier INI nécessitent un cycle de requête pour prendre effet (ou, pour les scripts à long terme, un appel explicite à Settings::setConfig(\Nibiru\Config::getEnv())).

  • Chemin menant /../../. Les chemins INI du framework sont relatifs au répertoire du framework. Ils doivent commencer par /../../ pour échapper à la racine de votre projet. Oui, cela semble bizarre ; oui, cela fonctionne.
  • Analyse booléenne. parse_ini_file est permissif — true, on, 1 deviennent tous 1; false, off, 0, "" deviennent 0. Utilisez des chaînes de trois guillemets si vous avez vraiment besoin d’une littérale "true".
  • Valeurs de tableau. Utilisez la syntaxe [] (smarty.css[] = …) — Nibiru repose sur le fait que ces éléments soient des tableaux.