# 🏗️ 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.