2026-05-22 14:53:34 +02:00
2026-05-22 14:51:19 +02:00
2026-05-21 14:34:35 +02:00
2026-05-22 14:53:34 +02:00
2026-05-21 14:32:39 +02:00

🏗️ 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

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

  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:

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.

S
Description
No description provided
Readme
214 KiB
0 Stars 1 Watchers 0 Forks
Languages
PHP 99.9%