$config */ $config = require $configPath; use App\Controllers\AuthController; use App\Controllers\DashboardController; use App\Controllers\UserManagementController; /** * Hilfsfunktion: Prüft, ob ein Benutzer eingeloggt ist. * Wenn nicht, wird auf die Login-Seite umgeleitet. * * @param array $config */ function requireLogin(array $config): void { // session_key_user aus dem Config-Array lesen. Wenn nicht gesetzt oder null, Standard "admin_user" verwenden. $sessionKey = $config['security']['session_key_user'] ?? 'admin_user'; // Prüfen, ob in $_SESSION unter diesem Key ein eingeloggter Benutzer hinterlegt ist. // Falls nicht, zurück zur Login-Seite umleiten. if (isset($_SESSION[$sessionKey]) === false) { header('Location: index.php?route=login'); exit; } } /** * Hilfsfunktion: Ergebnis-Array eines Controllers nehmen und das Layout rendern. * * Erwartetes Format im $result-Array: * [ * 'view' => string, // Pfad zur Content-View (z. B. public/views/dashboard.php) * 'data' => array // Daten für die View * 'pageTitle' => string, // Seitentitel * 'activeMenu' => string|null, // Menükennung für Sidebar (z. B. 'dashboard' oder 'users') * ] * * @param array $result */ function handleResult(?array $result): void { if ($result === null) { return; } if (isset($result['redirect']) === true) { header('Location: ' . (string)$result['redirect']); exit; } $contentView = (string)($result['view'] ?? ''); $viewData = (array)($result['data'] ?? []); $pageTitle = (string)($result['pageTitle'] ?? ''); $activeMenu = $result['activeMenu'] ?? null; if ($contentView === '' || file_exists($contentView) === false) { http_response_code(500); echo 'Interner Fehler: Content-View wurde nicht gefunden.'; exit; } // Hier rufen wir jetzt die Layout-Funktion aus layout.php auf renderLayout($contentView, $viewData, $pageTitle, is_string($activeMenu) ? $activeMenu : null); } // Controller instanziieren $authController = new AuthController($config); $dashboardController = new DashboardController($config); $userManagementController = new UserManagementController($config); // Route bestimmen $route = $_GET['route'] ?? 'login'; switch ($route) { case 'login': // Wenn bereits eingeloggt, direkt zum Dashboard $sessionKey = $config['security']['session_key_user'] ?? 'admin_user'; if (isset($_SESSION[$sessionKey]) === true) { header('Location: index.php?route=dashboard'); exit; } // Controller liefert View-Definition + Daten $result = $authController->showLoginForm(); renderLayout($result); break; case 'login.submit': // POST-Login wird im Controller verarbeitet. // Der Controller entscheidet, ob er redirectet oder ein View-Ergebnis zurückgibt. $result = $authController->processLogin(); if ($result !== null) { // z. B. bei Login-Fehler: Login-Seite mit Fehlermeldung anzeigen renderLayout($result); } // Bei erfolgreichem Login macht der Controller einen Redirect und beendet das Script. break; case 'logout': $authController->logout(); // logout() sollte selbst redirecten (z. B. auf route=login) break; case 'dashboard': requireLogin($config); $result = $dashboardController->show(); renderLayout($result); break; case 'users': requireLogin($config); $result = $userManagementController->show(); renderLayout($result); break; default: http_response_code(404); echo 'Route nicht gefunden.'; break; }