4.0 KiB
Executable File
🏗️ 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
- Dateien anlegen: Nutze das Script
php create_module.php <name>. - Controller registrieren: Trage den neuen Controller in der
$controllers-Liste inWEBROOT/index.phpein. - 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:
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:
<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:
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:
<form method="POST">
<button type="submit" name="save_data">Speichern</button>
<button type="submit" name="delete_data">Löschen</button>
</form>
Im Controller:
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:
// In index.php könnte man das Layout erweitern:
$layout->setBlock('scripts', '<script src="mein_script.js"></script>');
⚠️ Wichtige Regeln (Best Practices)
- Kein HTML im Controller: Controller bereiten nur Daten vor. HTML gehört ausschließlich in die
View. - Globale Klassen: Nutze
\vor globalen Funktionen oder Klassen (z.B.\DatabaseShow()), wenn du dich innerhalb eines Namespaces befindest. - Security: Nutze immer
htmlspecialchars()beim Ausgeben von Variablen in der View, um XSS-Angriffe zu verhindern. - Redirects: Nach einem
POST(Daten speichern) solltest du immer einheader("Location: ...")machen, damit die Seite beim Neuladen die Daten nicht doppelt sendet. - Namespaces: Achte darauf, dass neue Controller immer
namespace MVC\Controller;am Anfang stehen haben.