From b75c15a1185a31a8bbbe18c98baada53ba172a9a Mon Sep 17 00:00:00 2001 From: worker Date: Thu, 21 May 2026 14:32:39 +0200 Subject: [PATCH] init Readme --- README.md | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..a7d92ae --- /dev/null +++ b/README.md @@ -0,0 +1,166 @@ +# 🏗️ 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.*