MVC – Einführung durch ein eigenes kleines „Framework“

View (V)

Die View ist für das Layout zuständig und erledigt somit die Darstellung der Seite. Wir erstellen eine zentrale Klasse namens View, über die die Steuerung erfolgt, und eine Datei pro Aktion im Verzeichnis /views/. Laut Konvention erstellen wir pro Controller einen Unterordner in /views/. Die zugehörige View zur Startseite ist also im Pfad /views/index/index.phtml.

Für unsere Views kann jede beliebige Template-Engine (Twig, Mustache, …) zum Einsatz kommen. Die Kompilierung würde dann in der View::render() geschehen. Für unser Beispiel soll uns aber HTML mit gelegentlichem PHP genügen (.phtml).

Der größte Vorteil einer derartigen Trennung von Programmlogiken im Controller und Layout in der View ist, dass sich damit ein Designer auf das Layout konzentrieren kann, ohne vom Rest gestört zu werden.

Die View-Klasse zum jetzigen Zeitpunkt ist denkbar einfach:

Zur Auswahl der richtigen Datei, benötigt die View die Namen von Controller und Action, sowie den Pfad zur Andwendung im Dateisystem. Diese Informationen überreichen wir direkt im Konstruktor.

Der Aufruf erfolgt in der index.php durch zwei Zeilen nach der Action:

Im Template für die Startseite (/views/index/index.phtml) steht schließlich der HTML-Code.

Der vollständige Code bis hierher (v0.2)

Wir haben jetzt bereits eine funktionierende Webseite. Allerdings können wir bisher nur statische HTML-Dokumente ausliefern. Wie wir dynamische Inhalte (also Daten) vom Controller zur View weiterreichen sehen wir auf der nächsten Seite.

4 Gedanken zu „MVC – Einführung durch ein eigenes kleines „Framework““

  1. Tolles Tutorial !!

    Eine Frage habe ich jedoch dazu:
    $stmt->execute($options[‚bind‘]);
    welche Parameter stehen in $options ?

    LG

    1. Der $options Parameter bei den find Funktionen, soll möglichst flexibel einsetzbar sein.

      Bisher versteht die findFirst() zum einen direkt eine ID ModelBase(23) und zum anderen die Definition von Parametern. Dann muss ein Array übergeben werden, dass sowohl die WHERE Bedingung und Platzhalterdefinition als auch die Werte für die Platzhalter enthält. Das sieht dann so aus:
      [
      'criteria' => 'userId = :uid',
      'bind' => [':uid'=>5],
      ]

      Hier gilt die Syntax von PDO.

      Die find() Funktion versteht nur die zweite Variante, da ja explizit mehrere Ergebnisse gefunden werden sollen und die ID immer nur eines liefern würde.

  2. Hallo,

    geniales Tutorial (vielen Dank!), welches ich gerne dazu nutzen möchte, meine Kenntnisse in OOP zu vertiefen!

    Eine Frage:
    Unterstützt dieser MVC-Ansatz auch das Konzept Post-Redirect-Get? Ich möchte, dass der Benutzer die Vor-/Zurück-Buttons im Browser nutzen kann, OHNE dass er ein Post-Formular extra noch einmal re-loaden muss.

    Danke und viele Grüße

    Jörg

    1. Hallo Jörg,

      das funktioniert ohne Probleme.
      Was du nach einen POST-Request an den User zurück gibst (Webseite, Redirect, …) hat mit MVC an sich nichts zu tun.
      Und jede Action hört erst mal auf alle Anfragen egal welcher Typ (GET, POST, PUT, …). Weitere Einschränkungen wären in diesem einfachen Beispiel die Aufgabe des Entwicklers. Praktisch alle Frameworks bieten hier Unterstützung an.

      Hoffe das hilft!

Kommentare sind geschlossen.