From 7a2d53d7b1d5253b5d1d62eeaece5ce62d1937d0 Mon Sep 17 00:00:00 2001 From: Bruno Eckhardt Date: Fri, 22 May 2026 14:53:34 +0200 Subject: [PATCH] add documentaation --- init.php | 242 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 226 insertions(+), 16 deletions(-) diff --git a/init.php b/init.php index c92c0e2..ca8abbe 100644 --- a/init.php +++ b/init.php @@ -1,7 +1,7 @@ @@ -885,6 +885,67 @@ class HomeController extends Controller { } PHP; +$files['WEBROOT/src/MVC/Controller/AuthController.php'] = <<<'PHP' + 'password123', + 'user' => 'user123' + ]; + + if (isset($users[$username]) && $users[$username] === $password) { + $_SESSION['user_logged_in'] = true; + $_SESSION['username'] = $username; + header('Location: ?service=home'); + exit; + } else { + return $this->render('login', ['error' => 'Ungültige Anmeldedaten']); + } + } + + return $this->render('login'); + } + + public function logout() { + session_destroy(); + header('Location: ?service=login'); + exit; + } +} +PHP; + +$files['WEBROOT/src/MVC/Controller/DocsController.php'] = <<<'PHP' +render('docs', [ + 'title' => '📚 System-Dokumentation' + ]); + } +} +PHP; + $files['WEBROOT/src/MVC/Controller/TestController.php'] = <<<'PHP' Dashboard

Willkommen in de $files['WEBROOT/src/MVC/View/test1.php'] = "

Service 1

"; $files['WEBROOT/src/MVC/View/test2.php'] = "

System Check

"; +$files['WEBROOT/src/MVC/View/docs.php'] = <<<'HTML' +
+

🏛️ Framework Architektur & Dokumentation

+ + + +
+

1. Einführung

+

Dieses Framework basiert auf dem Model-View-Controller (MVC) Entwurfsmuster und nutzt einen Front Controller (index.php). Alle Anfragen werden zentral verarbeitet, was globale Middleware (wie Authentifizierung) und ein einheitliches Layout ermöglicht.

+
+ +
+

2. Datei-Referenz (Deep Dive)

+

Framework Core

+
    +
  • Router.php: Verwaltet die Routen. Unterstützt Middlewares. Das Dispatching erfolgt über den service Parameter in der URL.
  • +
  • Controller.php: Basisklasse für alle Controller. Bietet render() für Views und json() für API-Responses.
  • +
  • Model.php: Abstrakte Basis für Datenbank-Entitäten. Kapselt die databaseMethods.php in ein objektorientiertes Interface.
  • +
  • View.php: Behandelt das Extrahieren von Daten in HTML-Templates.
  • +
+

Konfiguration

+
    +
  • env.ini: Speichert Datenbank-Zugangsdaten für dev und live Umgebungen.
  • +
  • autoloader.php: Registriert einen PSR-4 ähnlichen Autoloader für den MVC\ Namespace.
  • +
+
+ +
+

3. API-System

+

APIs liegen im Verzeichnis WEBROOT/api/v1/. Sie nutzen die ApiController-Klasse.

+
+// Beispiel: WEBROOT/api/v1/get.php
+use MVC\Classes\Api;
+use MVC\Controller\ApiController;
+
+Api::jsonResponse((new ApiController())->get());
+        
+
+ +
+

4. Datenbank & Models

+

Das Framework nutzt mysqli mit Prepared Statements für maximale Sicherheit.

+

databaseMethods.php (Die Power-Tools)

+
    +
  • DatabaseShow($table, $columns, $where, ...$values)
  • +
  • DatabaseInsert($table, $columns, ...$values)
  • +
  • DatabaseUpdate($table, $set, $where, ...$values)
  • +
  • DatabaseDelete($table, $where, ...$values)
  • +
+
+ +
+

5. Helper Klassen (MVC\Classes)

+
    +
  • Request: Zugriff auf method(), queryParams(), headers().
  • +
  • Client: Ermittelt ip(), userAgent(), country().
  • +
  • Cookie: Interface zum set(), read(), Delete() von Cookies.
  • +
+
+ +
+

6. CLI-Generatoren

+

php create_module.php [Name] - Erstellt Controller & View.

+

php create_model.php [Tabelle] [Spalten] - Erstellt ein Model.

+
+ +
+

7. Best Practices

+

Naming: Controller immer mit Controller-Suffix. Models im Singular.

+

Security: Nutze ['auth'] Middleware konsequent für alle internen Seiten.

+
+
+ + +HTML; + +$files['WEBROOT/src/MVC/View/login.php'] = <<<'HTML' + +
+

🔑 Login

+ +
+ +
+
+ + +
+
+ + +
+ +
+
+HTML; + // --- ENTRY POINT --- $files['WEBROOT/index.php'] = <<<'PHP' add('home', \MVC\Controller\HomeController::class, 'index'); $router->add('toggle_theme', \MVC\Controller\HomeController::class, 'toggle_theme'); - $router->add('test1', \MVC\Controller\TestController::class, 'service1'); - $router->add('test2', \MVC\Controller\TestController::class, 'service2'); + $router->add('docs', \MVC\Controller\DocsController::class, 'index'); + $router->add('test1', \MVC\Controller\TestController::class, 'service1', ['auth']); + $router->add('test2', \MVC\Controller\TestController::class, 'service2', ['auth']); + $router->add('login', \MVC\Controller\AuthController::class, 'login'); + $router->add('logout', \MVC\Controller\AuthController::class, 'logout'); $layout = new \MVC\Layout\Layout('main'); $layout->setBlock('title', 'MVC Starter'); $layout->setBlock('header_title', '🚀 MVC Dashboard'); - $layout->setBlock('header_actions', ''); + + $headerActions = ''; + if (isset($_SESSION['user_logged_in'])) { + $headerActions = '👤 ' . htmlspecialchars($_SESSION['username']) . '' . + '🚪 Logout ' . + $headerActions; + } else { + $headerActions = '🔑 Login ' . + $headerActions; + } + $layout->setBlock('header_actions', $headerActions); // Sidebar Block ob_start(); $navItems = [ - 'home' => '🏠 Home', - 'test1' => '🛠️Test 1', - 'test2' => '📊 Test 2', + 'home' => ['label' => '🏠 Home', 'auth' => false], + 'test1' => ['label' => '🛠️ Test 1', 'auth' => true], + 'test2' => ['label' => '📊 Test 2', 'auth' => true], + 'docs' => ['label' => '📚 Dokumentation', 'auth' => false], ]; ?> setBlock('sidebar', ob_get_clean()); $layout->setBlock('content', $router->dispatch($service)); echo $layout->render(); -} catch (\Exception $e) { - http_response_code(404); echo "

404

" . $e->getMessage() . "

"; +} catch (\Throwable $e) { + http_response_code(500); + echo "

Error

" . htmlspecialchars($e->getMessage()) . "

"; + if (ini_get('display_errors')) echo "
" . htmlspecialchars($e->getTraceAsString()) . "
"; } PHP; @@ -1159,7 +1368,8 @@ if (!file_exists($viewFile)) { // 3. Anleitung ausgeben echo "\n--- NÄCHSTE SCHRITTE ---\n"; echo " Registriere das Modul in WEBROOT/index.php beim Router:\n"; -echo " \$router->add('{$key}', \\MVC\\Controller\\{$className}Controller::class, '{$key}', ['auth']);\n\n"; +echo " \$router->add('{$key}', \\MVC\\Controller\\{$className}Controller::class, '{$key}', ['auth']);\n"; +echo " (Lösche ['auth'] wenn kein Login erforderlich ist)\n\n"; echo "------------------------\n"; PHP; @@ -1173,4 +1383,4 @@ foreach ($files as $file => $content) { echo "\n✨ Projekt '$projectName' wurde initialisiert!\n"; echo "1. Richte deine Datenbankverbindung in WEBROOT/src/config/env.ini ein.\n"; echo "2. Starten: php server.php\n"; -echo "3. Öffnen: http://localhost:8000\n"; \ No newline at end of file +echo "3. Öffnen: http://localhost:8000\n";