Konfiguration und Einstellungen
Wie Nibiru Konfigurationen aus umgebungsspezifischen INI-Dateien lädt.
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.
Umgebungsauswahl
Abschnitt betitelt „Umgebungsauswahl“Die Umgebungsvariable APPLICATION_ENV wählt die zu ladende Datei aus:
APPLICATION_ENV | Datei geladen |
|---|---|
development (Standard) | application/settings/config/settings.development.ini |
staging | application/settings/config/settings.staging.ini |
production | application/settings/config/settings.production.ini |
export APPLICATION_ENV=production./nibiru -mi productionWenn APPLICATION_ENV nicht gesetzt ist, verwendet Nibiru standardmäßig development.
Abschnitte
Abschnitt betitelt „Abschnitte“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 = falsedebug = trueerror.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 = 25smarty.css[] = "/public/css/app.css"smarty.js[] = "/public/js/app.js"timezone = "Europe/Vienna"
[DATABASE]driver = "pdo"hostname = "localhost"port = 3306username = "nibiru"password = "secret"basename = "nibiru_dev"encoding = "utf8mb4"is.active = true
[SECURITY]password_hash = "change-me-at-once"
[GENERATOR]database = truedatabase.overwrite = true
[EMAIL]host = "smtp.example.com"port = 587encryption = "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"Konfiguration lesen
Abschnitt betitelt „Konfiguration lesen“$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']Modulkonfigurationen
Abschnitt betitelt „Modulkonfigurationen“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.iniDer Registrierung wird <module>.<env>.ini vor <module>.ini bevorzugt, sodass Sie automatisch Überschreibungen pro Umgebung erhalten.
Geheimnisse
Abschnitt betitelt „Geheimnisse“INI-Dateien sind einfache Textdateien. Zwei sichere Optionen für die Produktion:
A. Umgebungsüberlagerung
Abschnitt betitelt „A. Umgebungsüberlagerung“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:
envsubst < settings.production.ini.tpl > settings.production.iniB. Konfiguration außerhalb des Baums
Abschnitt betitelt „B. Konfiguration außerhalb des Baums“Behalten Sie settings.production.ini außerhalb des Repositories und erstellen Sie einen Symlink beim Bereitstellen.
ln -s /etc/nibiru/settings.production.ini \ application/settings/config/settings.production.iniDas Framework interessiert sich nicht dafür, wo die Datei liegt, solange parse_ini_file sie lesen kann.
Neuladen-Semantik
Abschnitt betitelt „Neuladen-Semantik“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())).
Häufige Fallen
Abschnitt betitelt „Häufige Fallen“- 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_fileist toleranter —true,on,1werden alle zu1;false,off,0,""werden zu0. 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.