Hans Wittwer

Geschichten, die das Leben schrieb

Serverseitige Skriptsprache PHP

MVC step by step with PHP

🏁

Zusammenfassung

Erfahrungsbericht nach Anwendung des Gelernten aus dem hervorragenden Kurs php-mvc-from-scratch  von Dave Hollingworth.

Erfahrungsbericht

Aufrufe und deren Umleitung

Eindrücklich ist die Genialität, beinahe alle Aufrufe an den Frontcontroller umzuleiten.

Wieso nur beinahe alle? Es werden sämtliche Aufrufe in das öffentliche Verzeichnis umgeleitet. Im öffentlichen Verzeichnis werden alle Aufrufe nur dann an den Frontcontroller geleitet, wenn das aufgerufene Verzeichnis und die aufgerufene Datei nicht existieren. Etwa Browser kommen mit derartigen Aufrufen daher, um Bilder anzufordern.

Alle anderen Aufrufe werden dem Frontcontroller gefüttert.

Frontcontroller

Der Frontcontroller:

  1. Erzwingt die strikte Variabelndeklaration
  2. Startet die Sitzung
  3. Merkt sich das öffentliche Verzeichnis
  4. Nimmt den Autolader in Betrieb
  5. Holt sich die Datenbankparameter
  6. Setzt den Ausnahmenmanager
  7. Erzeugt den Router (Array)
  8. Erzeugt den Container (Objekt)/li>
  9. Erzeugt die Middleware (Array)
  10. Erzeugt den Dispatcher (Objekt) mit Router, Container und >Middleware> als Parameter.
  11. Erzeugt die Anforderung (Objekt)
  12. Verlangt vom Dispatcher mit der Anforderung als Parameter die Antwort
  13. Sendet die Antwort an den Aufrufer
Router

Der Router ist ein Array aller zulässigen Links mit jeweils den passenden Parametern.

Etwa "/", [ "controller" => "home", "action" => "index", "middleware" => "login" ];

Im Grunde kann es Hunderte von gültigen Links geben, doch mithilfe von regulären Ausdrücken lassen sich die gültigen Varianten extrem zusammenfassen, etwa:

"/{controller}/{id:\d+}/show", [ "action" => "show", "middleware" => "login|message|test" ]

Wie das genau geht, erfährst Du im Kurs bei Dave.

Container

Der Container ist der Container eben. Den habe ich noch nicht durchschaut.

Middlewarer

Die Middleware ist ein Array mit Umleitungen, etwa:

"login" => \App\Middleware\RedirectLogin::class

Erfordert, dass Du Dich anmeldest, falls Du nicht schon angemeldet bist.

Controller

Pro Menüpunkt gibt es einen Controller. Der Controller ist im Verzeichnis src/App/Controllers und hat den Namen des Menüpunktes in der Mehrzahl, etwa src/App/Controllers/Hinweise.php und verwendet die Elternklasse src/Framework/Controller.php und kann zusätzlich eigene Methoden bekommen.

Der Controller berechnet, holt sich Daten via Modell und liefert das Resultat entsprechend dem View. Pro Aktion hat der Controller Methoden, die gängigsten bezieht er aus der Elternklasse.

Modell

Pro Controller gibt es ein Modell. Das Modell ist im Verzeichnis src/App/Models und hat den Namen des Controllers in der Einzahl, etwa src/App/Models/Hinweis.php und verwendet die Elternklasse src/Framework/Model und kann eigene Methoden erhalten.

Das Modell liest und schreibt in die Datenbank und bedient den Controller. Pro Auftrag vom Controller hat das Modell eine Methode, die gängigsten bezieht es aus der Elternklasse.

View

Pro Controller gibt es ein Verzeichnis

views/Controllername

Darin sind pro Methode Views gespeichert, etwa: views/Home/index.mvc.php

Fazit

Skripte auf die Schnelle mit Spezialtricks, noch ohne MVC-Framework. Ich habe zwar bei Dave hervorragende Technik kennengelernt, aber die ist mir noch zu hoch. Mit MVC wird’s knackig. Es ist schon so, dass Projekte mit MVC extrem wartungs- und erweiterungsfreundlich werden. Aber man wird schon gezwungen, strukturiert zu arbeiten. Ich denke, für Datenverwaltung mit Datenbanken und strukturierter Darstellung ist das MVC-Framework brillant. Mal so etwas Spezielles ausprobieren, kaum. Einfach so frei von der Leber etwas erfinden? Trotzdem, ich übe weiter, eventuell verstehe ich die Finessen im Laufe der Zeit.

Weiter