🏗️ 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)
- Ein Benutzer ruft
?service=benutzerauf. - Die
index.phplädt den Autoloader und initialisiert den Router. - Der Router prüft, ob eine Middleware (z.B.
auth) für diesen Service konfiguriert ist. - Wenn der Zugriff erlaubt ist, erstellt der Router eine Instanz des jeweiligen Controllers und ruft die Zielmethode auf.
- Der Controller nutzt ein Model, um Daten aus der Datenbank zu holen.
- Der Controller übergibt diese Daten an eine View (
$this->render()). - 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
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
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:
$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:
<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.
php init_mvc.php MeinProjekt
Modul (Controller + View) erstellen
Erstellt zwei Dateien und gibt dir den Code für den Router aus.
php create_module.php kunden_verwaltung
Model erstellen
Erstellt eine Model-Klasse mit Tabellenzuweisung und dokumentierten Spalten.
php create_model.php Kunden ID,NAME,EMAIL,TELEFON
🛡️ 7. Sicherheit & Best Practices
- XSS-Schutz: Gib niemals Variablen direkt in der View aus. Nutze immer
<?= htmlspecialchars($var) ?>. - SQL-Injection: Nutze niemals Variablen direkt in einem SQL-String. Nutze die Methoden
where(),update()etc. des Models. Sie verwenden intern Prepared Statements. - Namespaces: Alle Klassen im
src/MVCOrdner nutzen Namespaces. Achte beim Aufruf globaler Klassen (außerhalb des MVC-Ordners) auf den führenden Backslash, z.B.\db_connect(). - Error Handling: Fehler werden zentral in der
index.phpgefangen. 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:
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
- Stelle sicher, dass PHP 8.x installiert ist.
- Passe die
src/config/env.inimit deinen Datenbankdaten an. - Starte den internen Server:
php server.php. - Öffne
http://localhost:8000im Browser.
Dieses Framework wurde für maximale Produktivität entwickelt. Bei Fragen schau in die integrierte Dokumentation im Backend.