changes
This commit is contained in:
1 parent
5d249b3929
commit
165b1637da
2 files changed
+171
-2
No files matched your search
@@ -5,14 +5,17 @@
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"workbench.colorTheme": "Default Dark Modern",
|
||||
"workbench.colorTheme": "Dark Modern",
|
||||
"workbench.colorCustomizations": {
|
||||
"activityBar.background": "#ff000075",
|
||||
"activityBar.foreground": "#000000",
|
||||
"breadcrumb.foreground": "#FFFFFF",
|
||||
},
|
||||
"files.exclude": {
|
||||
"*.git*": true
|
||||
"*.git*": true,
|
||||
"WEBROOT/config_backups": true,
|
||||
"WEBROOT/static": true,
|
||||
"WEBROOT/templates": true,
|
||||
},
|
||||
"editor.renderWhitespace": "all",
|
||||
"editor.smoothScrolling": true,
|
||||
|
||||
@@ -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.*
|
||||
Reference in new issue
Block a user