Biphrost: Template
Wie fast jedes Framework verfügt auch Bifrost über eine
Template-Engine. Im Gegensatz zu vielen anderen Entwicklungen stellt
die Template-Klasse aus Bifrost lediglich einen
leichtgewichtigen Wrapper für PHP-Templates dar. Ziel ist es nicht,
möglichst viele Funktionalitäten bereitzustellen, sondern einen
Container anzubieten, der in den Einstiegspunkten mit Daten gefüllt
wird und am Ende der Abfertigung lediglich dargestellt wird. Möchte man
View-Helpers
verwenden, muss man diese selbst entwickeln oder man verwendet
Template-Engines, die solche Features bieten. Obgleich die
Template-Klasse Bestandteil von Bifrost ist, kann sie sehr leicht gegen
andere Template-Engines ausgetauscht werden, da die Template-Klasse nur
in Teilen von Bifrost verwendet wird, die durch die
Applikations-Entwickler geändert werden sollen.
Der Zugriff auf die Templates erfolt über die magischen Methoden __get, __set, __isset und __unset.
Diese magischen Methoden können allerdings auch zu einem Fehlverhalten
führen, da Templates im Inneren des Template-Objekts dargestellt
werden. Wird von außerhalb eine Variable gesetzt, deren Name identisch
mit einer nicht-sichtbaren Membervariable ist, dann würde ein Aufruf
demselben Namen im Template zum Holen der falschen Variable führen.
Deshalb wird zur Darstellung der Templates die Funktion extract
benutzt, um lokalen Zugriff auf die gespeicherten Variablen zu
ermöglichen, es ist deshalb ratsam, nur auf lokale Variablen
zuzugreifen. Beispiel:
// Außerhalb des Templates
$template = new Template('foobar.phtml');
$template->template = 'foo';
// Innerhalb des Templates
echo $this->template; // gibt 'foobar.phtml' aus
echo $template; // gibt 'foo' aus
Ein Template-Objekt ist immer mit einer Template-Datei gekoppelt, sodass ein Casten des Objekts zu einem String zum Rendern des Templates führt. Analog verfährt die Methode render, die das Template sofort darstellt. Ein Ändern der Template-Datei ist nicht möglich, allerdings kann man mithilfe der Methode derive ein neues Objekt erstellen, das die gleichen Variablen enthält, aber auf ein anderes Template zeigt.