studyklar
IProg · Skript 7 · Abschnitt 3

View und Controller mit PHP trennen

Das SQL steckt jetzt in einer Model-Klasse. Aber was ist mit dem Rest der Seite? Hier steht, was in die View gehört, was in den Controller, und wie beide in PHP zusammenarbeiten. Mit Weiter geht es Schritt für Schritt voran.

Worum es geht

Skript 07 (PHP – Architektur), Folien 10 bis 13: „Und der Rest?“, View-Ebene, View/Controller mit PHP und das Bild einer MVC-Anwendung mit PHP.

Die Frage des Abschnitts: Wie teilt man den Rest einer PHP-Seite auf View und Controller auf, und wie kommen die Daten vom einen zum anderen?

So gehen wir vor:

  1. Die Seite von Folie 10 ansehen: Was ist besser, was stört noch?
  2. Was auf die View-Ebene gehört und was nicht.
  3. Die Seite in Controller und View teilen.
  4. Das Gesamtbild und eine Klausurfrage.
Aus Skript 07, Folie 8: Die Model-Klasse CProductDB hat eine statische Methode find_all($db), die alle Produkte als Array von Objekten liefert.

Was schon besser ist

Das SQL steht in der Model-Klasse; die Seite ruft nur noch find_all auf.

Die drei Punkte in Zeile 6 sind Kurzschrift der Folie: Dort stehen Server, Benutzer, Passwort und Datenbank. Zeile 5 bindet die Datei mit der Klasse ein. require fügt den Inhalt einer anderen PHP-Datei an dieser Stelle ein.

Zeile 7 holt alle Produkte mit einem Aufruf. Kein SQL mehr in der Seite: Ändert sich die Tabelle, ändert man nur die Klasse.

Aus Skript 05, Folie 2: require und include fügen eine Datei ein. Fehlt sie, bricht require mit einem Fehler ab, include warnt nur.

Was noch stört

Verbindung öffnen und schließen gehört nicht in eine Seite, die nur anzeigen soll.

Die Seite öffnet in Zeile 6 die Verbindung zur Datenbank und schließt sie in Zeile 8. Das ist Steuerung, keine Darstellung. Die Verbindungsdaten stehen weiter in jeder Seite.

Und die Seite ist immer noch ein Gemisch aus HTML und PHP. Wer nur das Aussehen ändern will, muss sich durch den PHP-Block arbeiten. Es fehlt eine klare Trennung von View und Controller.

Noch 9 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1Und der Rest?

Folie 10

<html><head><title>MVC Demo</title></head><body><table><?phprequire("CProductDB.php");$db = new mysqli(...);$prods = CProductDB::find_all($db);$db->close();foreach ($prods as $p) {  echo "<tr><td> $p->productid </td>        <td> $p->name </td></tr>\n";}?></table></body></html>
LegendeTeil des SchrittsDer Code von Folie 10: die Seite, nachdem das SQL in die Klasse CProductDB gewandert ist.