Ir al contenido
Nibiru docsv0.9.2

Configuración y ajustes

Cómo Nibiru carga la configuración desde archivos INI específicos del entorno.

Stable Reading time ~ 2 min Edit on GitHub

La capa de configuración de Nibiru está intencionalmente sencilla: analiza un solo archivo settings.<env>.ini al arrancar, lo expone a través de un singleton y permite que los módulos agreguen sus propios INIs a través del Registro.

La variable de entorno APPLICATION_ENV selecciona qué archivo cargar:

APPLICATION_ENVArchivo cargado
development (por defecto)application/settings/config/settings.development.ini
stagingapplication/settings/config/settings.staging.ini
productionapplication/settings/config/settings.production.ini
Ventana de terminal
export APPLICATION_ENV=production
./nibiru -mi production

Si APPLICATION_ENV no está establecido, Nibiru predetermina a desarrollo.

Un archivo típico 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'

Para configuraciones profundamente anidadas, utilice las constantes tipadas de la interfaz View:

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

Cada módulo bajo application/module/<nombre>/settings/ puede llevar sus propios archivos INI. El Registro los detecta automáticamente y los expone a través de:

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

El Registro prefiere <módulo>.<entorno>.ini sobre <módulo>.ini, por lo que obtienes anulaciones por entorno de forma gratuita.

Los archivos INI son texto plano. Dos opciones seguras para producción:

Mantén settings.production.ini en el control de versiones con marcadores de posición e inyecta valores reales desde las variables de entorno en tiempo de ejecución:

[DATABASE]
password = "${DB_PASSWORD}"

Luego expándelos en tu contenedor/CI:

Ventana de terminal
envsubst < settings.production.ini.tpl > settings.production.ini

Mantén settings.production.ini fuera del repositorio y crea un enlace simbólico al momento de la implementación:

Ventana de terminal
ln -s /etc/nibiru/settings.production.ini \
application/settings/config/settings.production.ini

El marco no se preocupa por dónde vive el archivo siempre y cuando parse_ini_file pueda leerlo.

La configuración se lee una vez al arrancar, en el Settings estático. Los cambios en el INI requieren un ciclo de solicitud para que surtan efecto (o para scripts de larga ejecución, una llamada explícita a Settings::setConfig(\Nibiru\Config::getEnv())).

  • Ruta que lleva /../../. Las rutas INI del framework son relativas al directorio del framework. Deben comenzar con /../../ para escapar hasta la raíz de su proyecto. Sí, esto parece extraño; sí, funciona.
  • Análisis booleano. parse_ini_file es permisivo — true, on, 1 todos se convierten en 1; false, off, 0, "" se convierten en 0. Usa cadenas de tres comillas si realmente necesitas un literal "true".
  • Valores de array. Usa la sintaxis [] (smarty.css[] = …) — Nibiru depende de que estos sean arrays.