Files
Server-MrHossa/FLATNOTES/Backend MVC.md

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

  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:

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)

  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.