Zum Inhalt springen
Nibiru docsv0.9.2

Konfiguration und Einstellungen

Wie Nibiru Konfigurationen aus umgebungsspezifischen INI-Dateien lädt.

Stable Reading time ~ 2 min Edit on GitHub

Die Konfigurationsschicht von Nibiru ist absichtlich einfach: Beim Start wird eine einzelne settings.<env>.ini-Datei geparst, sie wird über einen Singleton zur Verfügung gestellt, und es können Module ihre eigenen INIs durch den Registry hinzufügen.

Die Umgebungsvariable APPLICATION_ENV wählt die zu ladende Datei aus:

APPLICATION_ENVDatei geladen
development (Standard)application/settings/config/settings.development.ini
stagingapplication/settings/config/settings.staging.ini
productionapplication/settings/config/settings.production.ini
Terminal-Fenster
export APPLICATION_ENV=production
./nibiru -mi production

Wenn APPLICATION_ENV nicht gesetzt ist, verwendet Nibiru standardmäßig development.

Ein typisches settings.<env>.ini:

[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'

Verwenden Sie für tief geschachtelte Konfigurationen die typisierten Konstanten aus der View-Schnittstelle:

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

Jeder Modul unter application/module/<name>/settings/ kann seine eigenen INI-Dateien haben. Der Registrierungsservice erkennt sie automatisch und macht sie über verfügbar:

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

Der Registrierung wird <module>.<env>.ini vor <module>.ini bevorzugt, sodass Sie automatisch Überschreibungen pro Umgebung erhalten.

INI-Dateien sind einfache Textdateien. Zwei sichere Optionen für die Produktion:

Behalten Sie settings.production.ini im Versionskontrollsystem mit Platzhaltern bei und fügen Sie reale Werte aus Umgebungsvariablen zur Laufzeit ein:

[DATABASE]
password = "${DB_PASSWORD}"

Erweitern Sie sie dann in Ihrem Container/CI:

Terminal-Fenster
envsubst < settings.production.ini.tpl > settings.production.ini

Behalten Sie settings.production.ini außerhalb des Repositories und erstellen Sie einen Symlink beim Bereitstellen.

Terminal-Fenster
ln -s /etc/nibiru/settings.production.ini \
application/settings/config/settings.production.ini

Das Framework interessiert sich nicht dafür, wo die Datei liegt, solange parse_ini_file sie lesen kann.

Die Konfiguration wird beim Booten einmal in die statische Variable Settings gelesen. Änderungen am INI-Format erfordern einen Anfragezyklus, um wirksam zu werden (oder für langlaufende Skripte einen expliziten Aufruf von Settings::setConfig(\Nibiru\Config::getEnv())).

  • Pfad mit /../../. Die INI-Pfade des Frameworks sind relativ zum Verzeichnis des Frameworks. Sie müssen mit /../../ beginnen, um in Ihr Projektverzeichnis zu wechseln. Ja, das sieht seltsam aus; ja, es funktioniert.
  • Boolesche Analyse. parse_ini_file ist toleranter — true, on, 1 werden alle zu 1; false, off, 0, "" werden zu 0. Verwenden Sie doppelte Anführungszeichen, wenn Sie wirklich einen Literalen "true" benötigen.
  • Array-Werte. Verwenden Sie die []-Syntax (smarty.css[] = …) — Nibiru setzt darauf, dass diese Array sind.