# 🏗️ Backend MVC Framework - Das Handbuch Dieses Framework ist eine performante, leichtgewichtige und modulare PHP-Architektur, die speziell für die Entwicklung von professionellen Backends und Dashboards entwickelt wurde. Es implementiert das **Model-View-Controller (MVC)** Pattern und trennt strikt zwischen Datenlogik, Geschäftslogik und UI-Design. --- ## 🏛️ 1. Architektur & Verzeichnisstruktur Das Herzstück des Frameworks liegt in `WEBROOT/src/MVC/`. Die Struktur ist darauf ausgelegt, dass das Projekt beliebig wachsen kann, ohne unübersichtlich zu werden. ### 📂 Ordner-Struktur im Detail * **`WEBROOT/index.php`**: Der zentrale Einstiegspunkt (Front Controller). Jede Anfrage läuft hier auf. Hier werden Routen registriert und das Layout zusammengesetzt. * **`src/MVC/Core/`**: * `Controller.php`: Basisklasse für alle Controller. Bietet Methoden für Rendering und JSON-Output. * `Model.php`: Basisklasse für Datenbankzugriffe. Implementiert sichere CRUD-Methoden via Prepared Statements. * `View.php`: Die Engine, die Daten in HTML-Templates extrahiert. * `Router.php`: Verwaltet Routen und schaltet Middlewares (Auth/Admin) vor. * `Layout/Layout.php`: Das Block-System für modulares UI-Design. * **`src/MVC/Controller/`**: Hier landen deine PHP-Klassen für die Logik. Beispiel: `UserController.php`, `LogController.php`. * **`src/MVC/Model/`**: Jede Klasse entspricht einer Datenbanktabelle. Hier wird definiert, *wie* Daten geholt oder gespeichert werden. * **`src/MVC/View/`**: Reine HTML-Dateien mit minimalem PHP-Code für die Anzeige. * **`src/MVC/Layout/Templates/`**: Enthält das Grundgerüst (`main.php`), in das die Views eingebettet werden. --- ## 🚦 2. Der Request-Lifecycle (Wie eine Seite entsteht) 1. Ein Benutzer ruft `?service=benutzer` auf. 2. Die `index.php` lädt den **Autoloader** und initialisiert den **Router**. 3. Der **Router** prüft, ob eine Middleware (z.B. `auth`) für diesen Service konfiguriert ist. 4. Wenn der Zugriff erlaubt ist, erstellt der Router eine Instanz des jeweiligen **Controllers** und ruft die Zielmethode auf. 5. Der **Controller** nutzt ein **Model**, um Daten aus der Datenbank zu holen. 6. Der Controller übergibt diese Daten an eine **View** (`$this->render()`). 7. Die **index.php** nimmt das HTML der View entgegen, packt es in den `content`-Block des **Layouts** und gibt die fertige Seite aus. --- ## 🏛️ 3. Arbeiten mit dem Model-Layer (Datenbank) Vermeide SQL direkt im Controller! Nutze immer Models für eine saubere Abstraktion. ### Beispiel: Ein eigenes Model erstellen ```php namespace MVC\Model; use MVC\Core\Model; class Product extends Model { protected static $table = "Produkte"; // Tabellenname in der DB public static function getExpensiveProducts() { return self::where("PREIS > ?", 100); // Sicher gegen SQL-Injection! } } ``` ### Verfügbare Methoden der Basisklasse: * `all()`: Lädt alles aus der Tabelle. * `find($id)`: Findet einen Datensatz per ID. * `where($sql, ...$params)`: Filtert mit Prepared Statements. * `insert($array)`: Speichert neue Daten (z.B. `['TITEL' => 'Test']`). * `update($array, $where, ...$params)`: Aktualisiert bestehende Daten. * `delete($where, ...$params)`: Löscht Datensätze sicher. --- ## 🎮 4. Controller & Formularverarbeitung Controller steuern den Ablauf. Sie entscheiden, was bei `GET` und was bei `POST` passiert. ### Beispiel: Daten verarbeiten ```php public function save() { if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Daten via Model speichern User::update(['STATUS' => 'aktiv'], "ID = ?", $_POST['id']); // WICHTIG: Danach immer Redirect (Post-Redirect-Get Pattern) header("Location: ?service=user_list"); exit; } return $this->render('edit_view'); } ``` --- ## 🧱 5. Das modulare Block-Layout Das Layout-System ermöglicht es, verschiedene Teile der Seite (Header, Sidebar, Content) unabhängig voneinander zu befüllen. ### Blöcke in `index.php` befüllen: ```php $layout = new \MVC\Layout\Layout('main'); $layout->setBlock('title', 'Admin Dashboard'); $layout->setBlock('sidebar', $sidebarHtml); $layout->setBlock('content', $controllerOutput); ``` ### Blöcke im Template (`main.php`) ausgeben: ```html ``` --- ## 🚀 6. CLI-Werkzeuge für Entwickler Das Framework kommt mit automatisierten Scripten, um lästige Routinearbeiten zu vermeiden. ### Projekt initialisieren Erstellt ein komplettes Skelett inkl. Dev-Server und API. ```bash php init_mvc.php MeinProjekt ``` ### Modul (Controller + View) erstellen Erstellt zwei Dateien und gibt dir den Code für den Router aus. ```bash php create_module.php kunden_verwaltung ``` ### Model erstellen Erstellt eine Model-Klasse mit Tabellenzuweisung und dokumentierten Spalten. ```bash php create_model.php Kunden ID,NAME,EMAIL,TELEFON ``` --- ## 🛡️ 7. Sicherheit & Best Practices 1. **XSS-Schutz**: Gib niemals Variablen direkt in der View aus. Nutze immer ``. 2. **SQL-Injection**: Nutze niemals Variablen direkt in einem SQL-String. Nutze die Methoden `where()`, `update()` etc. des Models. Sie verwenden intern Prepared Statements. 3. **Namespaces**: Alle Klassen im `src/MVC` Ordner nutzen Namespaces. Achte beim Aufruf globaler Klassen (außerhalb des MVC-Ordners) auf den führenden Backslash, z.B. `\db_connect()`. 4. **Error Handling**: Fehler werden zentral in der `index.php` gefangen. Admins erhalten detaillierte Informationen, User sehen eine sichere Fehlermeldung. --- ## ⚡ 8. AJAX & API Entwicklung Um Daten ohne Seiten-Reload zu laden, bietet der Controller die `json()` Methode: ```php public function getStatus() { $data = ['online' => true, 'time' => date('H:i')]; return $this->json($data); // Setzt Header und beendet Script } ``` In deinem JavaScript kannst du dies dann einfach per `fetch()` abrufen. --- ## 🛠️ 9. Installation & Start 1. Stelle sicher, dass PHP 8.x installiert ist. 2. Passe die `src/config/env.ini` mit deinen Datenbankdaten an. 3. Starte den internen Server: `php server.php`. 4. Öffne `http://localhost:8000` im Browser. --- *Dieses Framework wurde für maximale Produktivität entwickelt. Bei Fragen schau in die integrierte Dokumentation im Backend.*