Page-Controller

1. Einleitung

Das Herzstück des Adventure PHP Framework bildet der Page-Controller. Die Funktion des Page-Controllers besteht darin, einen allgemeingültigen Rahmen für Applikationen zu bieten, die nach dem MVC Muster implementiert werden. Er verfügt daher über Mechanismen zum Laden und Verarbeiten von Templates mit Hilfe der Funktionen von Taglibs, zur Ausführung von (Document-)Controller und zum Handling des MVC-Baumes, der mit Hilfe der TagLibs erzeugt wird.

Wegen der Baum-Struktur der GUI-Elemente spricht man in diesem Zusammenhang auch vom HMVC Pattern. Dieses sieht vor, dass es einen hirarchischen Baum bestehend aus lauter kleinen MVC-Einheiten gibt, der mit Hilfe eines Mechanismus (hier: Page-Controller) verwaltet wird. Beim HMVC Pattern geht man zudem davon aus, dass das Model nicht wie beim MVC Pattern stark an eine Zelle gebunden ist, sondern mehreren Zellen zur Verfügung stehen kann. So ist es auf eine um vielfaches flexiblere Weise möglich, Module und Applikationen zu erstellen.

2. Funktion

Da der Page-Controller nur den Rahmen absteckt, bzw. für das Ausführen des ihm zu eigenen Workflows zuständig ist, kann die Applikationslogik durch eigene Taglibs und (Document-)Controller direkt beeinflusst werden. Das bedeutet auch, dass der Page-Controller selbst unabhängig von in Tags definierter Logik handelt. Damit ist es möglich, Tags mit sehr unterschiedlichen Funktionen zu erstellen (z.B. Formulare, Taglibs zum Einbinden weiterer Templates, Platzhalter, ...). Das folgende Ablauf-Diagramm zeigt den angesprochenen Workflow und gibt Aufschluss darüber, wo der Entwickler eingreifen kann um eine Anforderung seiner Applikation umsetzen zu können. Per Klick kann das Bild vergrößert werden!

2.1. Ablaufdiagramm

Page-Controller timing model (APF)

2.2. Beschreibung

Im folgenden soll der Ablauf nochmal textuell beschrieben werden:

  • Zu Beginn einer Anfrage wird die Bootstrap-Datei (zumeist: index.php) aufgerufen.
  • Mit dem Aufruf der loadDesign() wird ein initiales Template geladen und geparst.
  • Beim Parsen wird nachgesehen, ob das Template eine Document-Controller-Anweisung und weitere bekannte Tags beinhaltet.
  • Ist eine Controller-Anweisungen vorhanden, wird diese extrahiert und die Informationen für die Transformation vorbereitet.
  • Sind bekannte Tags vorhanden, werden diese analysiert und als Kind-Objekte in den aktuellen DOM-Knoten eingehangen.
  • Beim Parsen eines Tags wird die für die Tag-Definition relevante TagLib-Implementierung (PHP-Klasse) instanziiert und ihr werden die Attribute und der Inhalt des Tags mitgegeben. Anschließend wird die Methode onParseTime() aufgerufen (siehe Implementierung von Tags). Die Implementierung der Funktion onParseTime() bestimmt dabei über die weitere Vorgehensweise mit den Inhalten des Tags, der wiederum weitere Tags beinhalten kann. Daher wird innerhalb dieser üblicherweise der Inhalt weiter analysiert, bekannte Tags als Kinder erzeugt...
  • Nach dem Parsen eines Knotens werden die Kinder in den Objektbaum eingehangen und es wird die onAfterAppend()-Methode jedes Kindes aufgerufen. In diesem Stadium "kennen" sich die einzelnen Knoten über die $this->parentObject- und $this->children-Referenzen. In dieser Funktion einer TagLib werden üblicherweise Operationen platzieren, bei denen ein Vater-Knoten oder ein dem Vater benachbarter Knoten relevant ist.
  • Nach Abschluss der loadDesign()-Methode steht ein kompletter APF-DOM-Baum zur Verfügung, der aus einer vom Entwickler direkt beeinflussten Anzahl an Knoten und deren Informationen besteht.
  • Der Aufruf von $page->transform() wird der DOM Baum rekursiv durchlaufen und transformiert. Dabei ist jedes Element für seine Transformation selbst zuständig. Da viele Knoten üblicherweise von der Klasse Document ableiten, gestaltet sich der Workflow wie folgt: zunächst wird überprüft, ob für den aktuellen Knoten ein Document-Controller definiert wurde. Falls ja, wird die dazu notwendige Klasse eingebunden, ihr werden die nötigen Referenzen, Attribute und Inhalte mitgegeben und anschließend wird die Methode transformContent() aufgerufen.
  • Nach dem Ausführen des Controllers wird die Liste der Kinder durchlaufen und diese werden ebenso durch den Aufruf der transform()-Methode transformiert. Die Knoten steuern dann selbst, in welcher Form die Transformation stattfinden soll. Der Page-Controller erwartet nur, dass der Aufruf von transform() den transformierten Inhalt des Knotens zurückgibt, da dieser vom aufrufenden Knoten verarbeitet wird.

3. Weitere Materialien

Weitere Informationen zur Verarbeitung von Taglibs können dem Forum-Thread Ein einfaches Formular erstellen. entnommen werden.

Eine weiterführende Beschreibung des Timing-Modells findet sich im Wiki.

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
« 1   »
Einträge/Seite: | 5 | 10 | 15 | 20 |
1
Christian 08.05.2010, 14:55:56
Weitere Hinweise zum Timing-Modell finden sich im Wiki unter http://wiki.adventure-php-framework.org/de/Timing-Modell_des_Page-Controller.