self::env('DB_HOST', 'db'), 'db_name' => self::env('DB_NAME', 'finanzmanager'), 'db_user' => self::env('DB_USER', 'finanzmanager'), 'db_pass' => self::env('DB_PASS', 'finanzmanager'), // Ohne APP_KEY in der Umgebung greift der beim ersten Containerstart // erzeugte Schlüssel unter data/. Beides leer heißt: keine // verschlüsselten Felder – Bankzugänge lassen sich dann nicht anlegen. 'app_key' => self::env('APP_KEY', '') ?: self::schluesseldatei($wurzel . '/data/schluessel/app_key'), 'debug_log' => self::env('DEBUG_LOG', '0') === '1', 'log_dir' => $wurzel . '/data/logs', 'import_dir' => $wurzel . '/data/import', 'base_url' => '', ]; } public static function get(string $key, mixed $default = null): mixed { return self::$data[$key] ?? $default; } /** Nur für Tests: erlaubt das gezielte Überschreiben einzelner Werte. */ public static function set(string $key, mixed $value): void { self::$data[$key] = $value; } private static function env(string $key, string $default): string { $wert = $_ENV[$key] ?? getenv($key); return ($wert === false || $wert === '') ? $default : (string)$wert; } /** Der vom Entrypoint erzeugte Schlüssel; fehlt die Datei, bleibt es leer. */ private static function schluesseldatei(string $pfad): string { if (!is_readable($pfad)) { return ''; } return trim((string)@file_get_contents($pfad)); } }