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

PHP-Code für Webanwendungen folgt für gewöhnlich einem Muster. Früher war das gerne mal „Spaghetti-Code“, heute folgen viele dem Prinzip des MVC – eine Abkürzung für Model-View-Controller. In diesem Artikel werde ich mit euch ein eigenes kleines „Framework“ entwickeln, dass dieses Prinzip veranschaulicht.


Inhalt


Grundlagen

Begriffsklärung

Model-View-Controller (MVC) bedeutet vor allem die Trennung von Aufgaben. Dabei symbolisieren die einzelnen Teile die drei häufigsten (und egtl. immer vorhandenen) Aufgaben einer Webanwendung. Ich werde mich jedem Buchstaben im Detail widmen und am Ende noch einen Ausblick auf weitere „Buchstaben“ geben.

Der Beispiel-Code zum mitmachen

Der Programmcode für unser Beispiel findet sich auf Github und darf von euch frei kopiert werden: MVC-Example. Im Laufe des Artikels werde ich immer wieder auf die entsprechenden Tags verlinken, die den besprochenen Stand des Codes repräsentieren.

Vorbereitung und index.php

Umleiten aller URLs (z. B. mit mod_rewrite)

Als Einstiegspunkt in eine MVC-Anwendung dient – wie sonst auch – eine index.php. Alle Anfragen an unseren Server werden dahin umgebogen. Eine entsprechende .htaccess für Apache könnte also so aussehen:

Andere Webserver bieten ähnliche Mechanismen. Wichtig für uns ist, dass die Anfrage auf die index.php umgeleitet wird und ein Parameter _url die vom Benutzer tatsächlich eingegebene Adresse enthält.

Damit erreichen wir einen zentralen Einstiegspunkt (die index.php) in unsere Anwendung, ohne die wichtige Information, welche Seite der Benutzer sehen will zu verlieren.





Autoloader

Irgendwie müssen unsere Klassen noch geladen werden. Da wir uns an PSR-4 halten, genügen folgende Zeilen als Autoloader. Dieser soll sich lediglich um den Namensraum Mvc kümmern, damit später von uns verwendete Bibliotheken nicht gestört werden.

Nähere Einzelheiten zum Konzept des Autoloader findet ihr ein einem eigenen Beitrag: Autoloader.

Nachdem wir nun die Grundlagen gelegt haben, können wir in die MVC-Struktur einsteigen. Der erste Schritt ist dabei ein Controller: Weiter zum Controller

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.