Template-Engines in PHP: Übersicht
Was eine Template-Engine gegenüber purem PHP leistet, welche Ansätze es gibt und wie du für ein konkretes Projekt entscheidest – von vlibTemplate über Smarty bis Twig.
Das Wichtigste
- PHP ist selbst eine Template-Sprache. Eine Engine bringt Nutzen durch Beschränkung, nicht durch zusätzliche Möglichkeiten.
- Drei Ansätze: eigene Syntax (Smarty, Twig), Platzhalter mit Kommentar-Blöcken (vlibTemplate), unveränderte HTML-Attribute (TinyButStrong).
- Automatisches Escaping ist das stärkste Argument. Twig escapet standardmässig, die älteren Engines nicht.
- Für Bestandsprojekte zählt Wartbarkeit mehr als Eleganz: eine laufende Engine zu ersetzen kostet mehr, als sie zu verstehen.
Die häufigste Kritik lautet: PHP ist selbst eine Template-Sprache, wozu also eine zweite? Das stimmt technisch und geht am Punkt vorbei. Der Nutzen einer Engine liegt nicht darin, mehr zu können, sondern weniger zu erlauben.
Was eine Engine tatsächlich bringt
Trennung durchsetzen. In einer .php-Datei kann jederzeit eine Datenbankabfrage stehen. In einem Template mit eigener Syntax ist das nicht möglich – die Engine kennt keine Datenbank. Das ist eine Einschränkung, und genau darin liegt der Wert.
Automatisches Escaping. Der praktisch wichtigste Punkt. In purem PHP muss jede Ausgabe einzeln durch htmlspecialchars, und ein vergessener Aufruf ist eine XSS-Lücke. Twig escapet standardmässig, ohne dass jemand daran denken muss.
Templates für Nicht-Entwickler. Eine Designerin kann ein Template mit Platzhaltern bearbeiten, ohne PHP zu verstehen. Bei TinyButStrong bleibt die Datei sogar valides HTML und lässt sich in einem visuellen Editor öffnen.
Vererbung und Bausteine. Ein Basistemplate mit definierten Blöcken, das die Einzelseiten überschreiben – das lässt sich in purem PHP nachbauen, aber selten so sauber.
Die drei Ansätze
Eigene Syntax. Smarty und Twig bringen eine eigene Sprache mit geschweiften Klammern mit:
{% for produkt in produkte %}
<li>{{ produkt.name }} – {{ produkt.preis|number_format(2, ',', '.') }} €</li>
{% endfor %}
Ausdrucksstark, mit Filtern und Vererbung. Der Preis ist eine zweite Sprache, die jeder im Team lernen muss.
Platzhalter mit Blöcken. vlibTemplate arbeitet mit einfachen Platzhaltern und Kommentar-artigen Steuerelementen:
<!-- BEGIN produkte -->
<li>{NAME} – {PREIS} €</li>
<!-- END produkte -->
Weniger mächtig, dafür in zehn Minuten erklärt. Logik ist bewusst nicht möglich, was die Trennung erzwingt.
Unverändertes HTML. TinyButStrong benutzt HTML-Kommentare und Attribute, sodass die Datei valides HTML bleibt:
<li>[produkte.name] – [produkte.preis] €</li>
Der Vorteil zeigt sich, wenn die Templates von jemandem gepflegt werden, der mit einem visuellen Editor arbeitet.
Entscheidungshilfe
| Situation | naheliegende Wahl |
|---|---|
| Neues Projekt, Framework offen | Twig |
| Symfony oder Drupal im Einsatz | Twig (ist ohnehin dabei) |
| Bestandsprojekt läuft mit Smarty | bei Smarty bleiben, auf aktuelle Version heben |
| Bestandsprojekt läuft mit vlibTemplate | verstehen und pflegen, nur bei PHP-Inkompatibilität ersetzen |
| Templates werden von Designern gepflegt | TinyButStrong oder Twig |
| Sehr kleines Projekt, eine Person | pures PHP mit alternativer Syntax |
Der letzte Fall wird oft übersehen. Für eine Handvoll Seiten ist das hier vollkommen ausreichend:
<ul>
<?php foreach ($produkte as $p): ?>
<li><?= htmlspecialchars($p['name'], ENT_QUOTES, 'UTF-8') ?></li>
<?php endforeach; ?>
</ul>
Die alternative Syntax mit : und endforeach bleibt zwischen HTML lesbar. Was fehlt, ist das automatische Escaping – jeder <?= ohne htmlspecialchars ist ein potenzielles Loch.
Wenn du eine alte Engine übernimmst
Bestandsprojekte mit vlibTemplate, Smarty 2 oder TinyButStrong laufen häufig seit vielen Jahren. Vor jeder Migrationsentscheidung lohnt sich die nüchterne Prüfung:
- Läuft die Engine auf der Ziel-PHP-Version? Das ist die einzige Frage, die eine Migration wirklich erzwingt. Alter Code mit
ereg,eachoder Konstruktoren im PHP-4-Stil bricht spätestens ab PHP 8. - Gibt es offene Sicherheitslücken? Besonders relevant bei Engines, die PHP-Code im Template zulassen.
- Wie oft werden die Templates tatsächlich angefasst? Wer im Jahr drei Änderungen macht, gewinnt durch eine Migration nichts.
Ist die Antwort auf 1 und 2 unkritisch, ist die richtige Entscheidung fast immer: verstehen, dokumentieren, weiterlaufen lassen. Die ausführlichen Anleitungen zu den einzelnen Engines findest du in diesem Bereich – sie sind für genau diesen Fall geschrieben.
Häufige Fragen
Brauche ich überhaupt eine Template-Engine?
Für kleine Projekte reicht PHP mit der alternativen Syntax und konsequentem htmlspecialchars. Eine Engine lohnt sich, sobald mehrere Personen an den Templates arbeiten, Designer ohne PHP-Kenntnisse beteiligt sind, oder du automatisches Escaping erzwingen willst.
Welche Engine ist heute Standard?
Twig. Es wird aktiv entwickelt, escapet standardmässig, ist in Symfony und Drupal verankert und hat mit Abstand die beste Werkzeugunterstützung. Für Neuprojekte ohne besondere Anforderung ist es die naheliegende Wahl.
Lohnt sich die Migration einer alten Engine?
Nur mit einem konkreten Anlass. Eine funktionierende vlibTemplate- oder Smarty-Installation zu ersetzen kostet Wochen und bringt fachlich nichts. Sinnvoll wird die Migration, wenn die Engine auf der Ziel-PHP-Version nicht mehr läuft oder eine Sicherheitslücke offen bleibt.
Kosten Template-Engines Laufzeit?
Beim ersten Aufruf ja, weil das Template geparst wird. Alle ernstzunehmenden Engines kompilieren anschliessend nach PHP und cachen das Ergebnis. Ab dem zweiten Aufruf ist der Unterschied zu purem PHP in der Regel nicht mehr messbar.
Weiterlesen
- Template-Engines im Vergleich
vlibTemplate, Smarty, TinyButStrong und Twig nebeneinander: Syntax, Wartungsstand, Lernkurve und Laufzeitverhalten.
- vlibTemplate: Aufbau, Syntax und Beispiele
Platzhalter, Schleifen, Bedingungen und Includes der klassischen Engine - inklusive Hinweisen zum Betrieb auf aktuellen PHP-Versionen.
- Smarty: Grundlagen und typische Muster
Zuweisungen, Modifier, Blöcke und Caching - und wo Smarty in modernen Projekten noch seinen Platz hat.
- TinyButStrong: Templates ohne eigene Sprache
Der Ansatz, HTML unverändert zu lassen und nur Felder zu ersetzen: Blöcke, Datenquellen und der Umgang mit Office-Dateien.