mvc guide, its also in flatnotes under Backend MVC
This commit is contained in:
1 parent
f61d0ea8fe
commit
80b31284ab
1 file changed
+125
@@ -0,0 +1,125 @@
|
||||
# 🏗️ 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 <name>`.
|
||||
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
|
||||
<p>Es sind <?= $anzahl ?> Benutzer im Status <?= $status ?>.</p>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 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
|
||||
<form method="POST">
|
||||
<button type="submit" name="save_data">Speichern</button>
|
||||
<button type="submit" name="delete_data">Löschen</button>
|
||||
</form>
|
||||
```
|
||||
|
||||
**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', '<script src="mein_script.js"></script>');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 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.
|
||||
Reference in new issue
Block a user