Dieser Artikel ist bereits über 2 Jahre alt. Das gezeigte Vorgehen ist vielleicht nicht mehr aktuell.
Copyright bei Patrick Froch und easy Solutions IT. Dieses Werk ist lizenziert unter Creative Commons BY-NC-SA.

Views
oder die F3-Template-Engine mittels Templates
. Ich werde auf beide Varianten
eingehen, aber den Schwerpunkt bei der Template-Engine setzten.
Views
Wie bereits erwähnt, werden mittels Views Dateien mit PHP-Code ausgegeben. Die Views sehen dabei aus wie gewohnt: Für die Ausgabe ist folgendes nötig: Statt der Methoderender()
, bei der der HTML-Code maskiert und somit ausgegeben und nicht interpretiert
wird, kann man auch die Methode raw()
verwenden. Viel mehr gibt es zu Views auch nicht zu sagen, da die
Erstellung den aus HTML
und PHP
bekannten Regeln folgt und das Rendering mit ein
(Zeile 9) bis zwei Zeilen (Zeilen 6 und 7) PHP-Code im Controller erledigt ist.
Templates
Kommen wir nun zur F3-Template-Engine. Sie ist sicher nicht so leistungsfähig wie Smarty oder Twig, aber ich finde die Lösung ganz charmant. Für dieselbe Ausgabe wie oben, erstellt man folgendes Template: Wie man sieht, wird auf Variablen mit doppelten geschweiften Klammern ({{ }}
) und dem At-Zeichen
(@
) zugegriffen. Wichtig sind die Leerzeichen zwischen dem Bezeichner (@name
) und den
Klammern.
Der Code im Controller sieht fast genau so aus, wie im Beispiel oben, nur dass die Klasse Template
statt
View
verwendet wird.
Der Zugriff auf Arrays geschieht mit der Array- oder der Punktnotation:
Gesetzt werden Arrays im Controller z.B. so:
Hat man eine Zählervariable, funktioniert die Punktnotation nicht! Man muss dann die Array-Notation
verwenden.
Kommentare
Auch Kommentare sind möglich, diese haben gegenüber HTML-Kommentaren den Vorteil, dass sie in der Ausgabe nicht erscheinen. So weit zu den Grundlagen. Nun muss eine Template-Engine mehr bieten als die reine Ausgabe von Variablen. Viel interessanter sind die Dinge, die man mit den Werten im Template anstellen kann. Darum soll es jetzt gehen.Manipulation der Werte
Um einfache Manipulationen an Werte vorzunehmen, kann man im Template z.B. die folgenden Möglichkeiten nutzen: Besonders elegant finde ich die verkürztenif
-Abfragen in Zeile 3 und 5 und die Verwendung von
PHP-Funktionen in Zeile 4 und 5.
Setzen von Werten im Template
Natürlich können auch Werte innerhalb des Templates gesetzt, bzw. geändert werden:Eigene Funktionen
Um eigene Funktionen für Templates zu erstellen, werden anonyme Funktionen einer Variable zugewiesen: Diese können dann im Template verwendet werden: Wichtig ist hier den Wert mitreturn
zurückzugeben und nicht mit echo
direkt auszugeben.
Automatisches Maskieren
Normalerweise werden alle Werte in F3 in HTML-Entities umgewandelt, so dass das HTML-Markup ausgegeben statt interpretiert wird. Dies ist natürlich sehr störend, wenn man in seine Seite dynamisch HTML-Inhalt einfügen möchte. Es gibt mehrere Varianten, um dies zu ändern. Will man grundsätzlich keine Maskierung kann man sie global ausschalten: Dies ist sicher nicht die beste Vorgehensweise, da so auch potentiell unsichere Daten, wie Formulareingaben nicht umgewandelt werden. Besser ist es bei den Variablen mit dem Inhalt aus der eigenen Applikation, folgendes zu verwenden: So hat man immer noch die Kontrolle über einzelne Daten. Wenn in@html_content
unsichere Daten verwendet
werden, kann man dort bei den entsprechenden Variablen das raw
einfach weglassen. Zusätzlich gibt es die
Möglichkeit diese Daten manuell zu "entschärfen":
Man hat auch die Möglichkeit bestimmte Tags zu erlauben:
Undefinierte Werte
F3 ist sehr kleinlich, was undefinierte Werte in Templates angeht. Wird im Template auf eine Variable zugegriffen, die nicht definiert ist, gibt es sofort eine Fehlermeldung. Leider auch wenn man versucht zu prüfen, ob es die Variable gibt. Dies ist etwas unschön, aber es gibt Abhilfe. Wenn auch sie leider nicht sehr elegant ist. Man kann entweder alle Variablen vorbelegen (z.B.$f3->set('myVar',NULL)
), was bei großen Anwendungen etwas mühsam und
Fehleranfällig ist, oder man nutzt im Template bei der Prüfung das At-Zeichen (@
):
Man beachte das doppelte At-Zeichen in Zeile 1!
Templates in Templates nutzen
F3 erlaubt beliebig tief verschachtelte Templates. Um Templates in anderen Templates zu nutzen, kann man sie einfach wie folgt einfügen: Man kann den Namen des Templates auch in einer Variable speichern und so dynamisch laden: Es ist auch möglich Templates bedingt zu laden: Mittelswith
ist es auch möglich Variablen an das geladene Template zu übergeben:
Blockverarbeitung
Neben der Ausgabe von Variablen, ist die Verarbeitung von Blöcken sicher die wichtigste Aufgabe einer Template-Engine. Auch F3 bietet hier einige Möglichkeiten.Repeat
Mit Repeat ist es möglich einen Block zu wiederholen und z.B. für alle Elemente eines Arrays durchzugehen. Hier erfolgt die Ausgabe eines Paragraphen für jeden Wert im Array@fruits
. Mit @fruit
kann
im Block auf den entsprechenden Wert zugegriffen werden. Nun ist es häufig so, dass man auch den Key des Arrays
benötigt.
Die repeat
-Blöcke können beliebig verschachtelt werden. Zusätzlich gibt es noch einen optionalen Zähler.
Mit diesem können sehr leicht verschiedene Formatierungen für unterschiedliche Elemente umgesetzt werden.
Loop
In manchen Fällen möchte man einen Block auch einfach wiederholen, ohne ein Array zu durchlaufen. Für diesen Zweck gibt es die Loop-Anweisung.Switch
Neben dercheck
-Anweisung gibt es für die bedingte Verzweigung noch die switch
-Anweisung,
die hier auch nicht unerwähnt bleiben soll.
Kommentare
Einen Kommentar schreiben