diff --git a/WEBROOT/src/MVC/MVC_GUIDE.md b/WEBROOT/src/MVC/MVC_GUIDE.md new file mode 100644 index 0000000..5095e0d --- /dev/null +++ b/WEBROOT/src/MVC/MVC_GUIDE.md @@ -0,0 +1,125 @@ +# 🏗️ Backend MVC Dokumentation + +Dieses Projekt nutzt eine moderne **Model-View-Controller (MVC)** Struktur mit einem **modularen Block-Layout**. Dies trennt die Geschäftslogik vom Design und macht den Code wartbar und erweiterbar. + +--- + +## 📁 Verzeichnisstruktur + +- `WEBROOT/src/MVC/Core/`: Basisklassen (`Controller`, `View`). +- `WEBROOT/src/MVC/Controller/`: Hier liegt die Logik (PHP-Klassen). +- `WEBROOT/src/MVC/View/`: Hier liegen die Templates (HTML/PHP). +- `WEBROOT/src/MVC/Layout/`: Das globale Layout-System und die Blöcke. +- `WEBROOT/index.php`: Der "Entry Point", der alles zusammenfügt. + +--- + +## 🚀 Einen neuen Service erstellen + +1. **Dateien anlegen:** Nutze das Script `php create_module.php `. +2. **Controller registrieren:** Trage den neuen Controller in der `$controllers`-Liste in `WEBROOT/index.php` ein. +3. **In Config eintragen:** Füge den Service in der `config.php` (oder über die Admin-Oberfläche) hinzu, damit er in der Sidebar erscheint. + +--- + +## 💡 Arbeiten mit Controller & View + +### Daten vom Controller an die View übergeben +Im Controller nutzt du die `render()` Methode: + +```php +public function mein_service() { + $userCount = 42; + return $this->render('meine_view', [ + 'anzahl' => $userCount, + 'status' => 'aktiv' + ]); +} +``` + +In der View (`meine_view.php`) sind diese Variablen direkt verfügbar: +```html +

Es sind Benutzer im Status .

+``` + +--- + +## 🛠️ Mehrere Funktionen in einer View nutzen + +Wenn du innerhalb eines Projekts verschiedene Aktionen ausführen willst (z.B. Anzeigen, Bearbeiten, Löschen), gibt es zwei gängige Wege: + +### 1. Über URL-Parameter (Empfohlen für einfache Logik) +Du nutzt einen Parameter wie `?action=edit` in deinen Links. + +**Im Controller:** +```php +public function mein_service() { + $action = $_GET['action'] ?? 'list'; + $data = []; + + if ($action === 'edit') { + $data = ["mode" => "Bearbeiten"]; + } else { + $data = ["mode" => "Listenansicht"]; + } + + return $this->render('mein_view', $data); +} +``` + +### 2. Formular-Aktionen (POST) +Wenn du Buttons für verschiedene Funktionen hast, kannst du diese im Controller abfangen: + +**In der View:** +```html +
+ + +
+``` + +**Im Controller:** +```php +public function mein_service() { + if ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isset($_POST['save_data'])) { + // Logik für Speichern + } + if (isset($_POST['delete_data'])) { + // Logik für Löschen + } + // Nach POST immer Redirect, um "F5-Resubmit" zu verhindern + header("Location: ?service=mein_service"); + exit; + } + return $this->render('mein_view'); +} +``` + +--- + +## 🧱 Das Block-Layout System + +Das Layout besteht aus Blöcken. In der `index.php` kannst du diese Blöcke füllen, bevor das Layout gerendert wird: + +- `title`: Der Tab-Titel. +- `header`: Der obere Balken. +- `sidebar`: Das Seitenmenü. +- `content`: Der Hauptinhalt (kommt meist aus dem Controller). +- `scripts`: Zusätzliches JavaScript für die Seite. + +Beispiel für zusätzliche Scripte im Controller: +```php +// In index.php könnte man das Layout erweitern: +$layout->setBlock('scripts', ''); +``` + +--- + +## ⚠️ Wichtige Regeln (Best Practices) + +1. **Kein HTML im Controller:** Controller bereiten nur Daten vor. HTML gehört ausschließlich in die `View`. +2. **Globale Klassen:** Nutze `\` vor globalen Funktionen oder Klassen (z.B. `\DatabaseShow()`), wenn du dich innerhalb eines Namespaces befindest. +3. **Security:** Nutze immer `htmlspecialchars()` beim Ausgeben von Variablen in der View, um XSS-Angriffe zu verhindern. +4. **Redirects:** Nach einem `POST` (Daten speichern) solltest du immer ein `header("Location: ...")` machen, damit die Seite beim Neuladen die Daten nicht doppelt sendet. +5. **Namespaces:** Achte darauf, dass neue Controller immer `namespace MVC\Controller;` am Anfang stehen haben.