init Readme

This commit is contained in:
worker committed 2026-05-21 14:32:39 +02:00
commit b75c15a118
1 file changed
+166
+166
View File
@@ -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
<aside class="sidebar">
<?= $this->getBlock('sidebar') ?>
</aside>
```
---
## 🚀 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 `<?= htmlspecialchars($var) ?>`.
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.*