Erweiterungsmöglichkeiten
An dieser Stelle haben wir das Gerüst für eine Webanwendung erstellt. Jetzt könnten wir im Controller noch eine beforeAction()
anlegen, die vor jeder Action ausgeführt wird. Darin könnte dann zum Beispiel eine Session gestartet werden. Mit einer afterAction()
könnten dann ständig wiederkehrende Parameter der Seite wie etwa Meta-Tags generiert werden.
Erweiterungen für die View könnten eine Hierarchie enthalten. Damit wäre es möglich in einer layout.phtml
das HTML-Gerüst zu hinterlegen.
Komponenten/Services
In einer realen Webanwendung wird es sehr schnell notwendig werden Logiken aus dem Controller in eigenständige Klassen zu packen. So würde der Versand von E-Mails natürlich in einer Mailer-Klasse gekapselt, die dann von verschiedenen Controllern verwendet werden kann. Solche Klassen werden wahlweise als Service oder als Komponente bezeichnet.
Abhängigkeiten auflösen
Eine Abhängigkeit entsteht, wenn eine Klasse eine andere zwingend benötigt um ihre Aufgabe erfüllen zu können. Unser IndexController
benötigt beispielsweise \Mvc\Model\User
, \Mvc\Library\View
und \Mvc\Library\NotFoundException
, hat also drei Abhängigkeiten. Ein vollständiges Framework bietet hierfür eine Art von „Dependency Injection„.
Tolles Tutorial !!
Eine Frage habe ich jedoch dazu:
$stmt->execute($options[‚bind‘]);
welche Parameter stehen in $options ?
LG
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.
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
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!