Artikel
von Patrick Froch
Anspruch 3/5 Fat Free Framework 3.x PHP 5.6
In diesem Artikel soll es um die Ausgabe im PHP Fat Free Framework gehen, es gibt hier zwei Möglichkeiten: normales PHP über 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 Methode render(), 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ürzten if-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 mit return 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: Mittels with 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 der check-Anweisung gibt es für die bedingte Verzweigung noch die switch-Anweisung, die hier auch nicht unerwähnt bleiben soll.

Fazit

Die meisten Aufgabenstellungen sollten sich mit den Möglichkeiten der F3-Template-Engine lösen lassen. Auch wenn es hier und da etwas an Eleganz mangelt und die großen Template-Engines wesentlich umfangreicher sind, ist meiner Meinung nach ein guter Kompromiss zwischen Verständlichkeit und Leistungsfähigkeit gelungen. Wie der Rest des Fat Free Frameworks tut die Template-Engine was sie soll, nicht mehr, aber auch nicht weniger.

Zurück

Kommentare

Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.