PHP Template Engine

UIEngine

Eine schlanke PHP-Template-Engine, die Logik und Darstellung sauber trennt – ohne eval(), mit striktem Auto-Escaping und einer optionalen Security-Sandbox für Umgebungen mit mehreren Template-Autoren.

v15 · extern sicherheitsauditiert · PHP 8.1+ · keine Abhängigkeiten

Was ist UIEngine?

UIEngine kompiliert eine eigene, kompakte Template-Syntax (.tpl-Dateien) zu gecachtem PHP. Anders als eine frühere Vorversion setzt der aktuelle Compiler dabei nie mehr auf rohe Textersetzung: Jeder Ausdruck läuft durch einen rekursiven Grammatik-Parser, der nur eine feste, geprüfte Menge an Konstrukten zulässt – Variablen, Vergleichsoperatoren, Array-/Objekt-Zugriff, aber keine Funktions- oder Methodenaufrufe und kein ::.

Das Ergebnis: Template-Autoren bekommen eine vertraute, Smarty-artige Syntax mit Vererbung, Includes, Modifiern und eigenen Plugins – Entwickler behalten die Kontrolle darüber, was in einem Template überhaupt ausführbar ist.

Sechs Gründe für UIEngine

Kein eval()

Jeder Ausdruck läuft durch einen rekursiven Grammatik-Parser statt durch preg_replace-Codegenerierung. Funktionsaufrufe, "::" und Methodenaufrufe sind kategorisch ausgeschlossen.

Auto-Escaping

{$var}-Ausgaben werden standardmäßig HTML-escaped. Wer roh ausgeben will, muss das mit |raw explizit anfordern – nie umgekehrt.

Vererbung & Includes

{extends}, {block}, {parent} und {include} für wiederverwendbare Layouts, plus {function} für eigene Template-Makros.

Security-Policy-Sandbox

Optional einschränkbar: erlaubte Modifier, sichtbare PHP-Konstanten, zusätzliche Template-Verzeichnisse, {eval} sperren, {fetch} nur mit expliziter Freigabe.

Output-Caching

Kompilierte Templates werden gecacht, ganze Seiten optional per display($tpl,$id,$lifetime) – dynamische Inseln bleiben über {nocache} live.

Keine Abhängigkeiten

Reines PHP 8.1+, eigener PSR-4-Autoloader für den Einsatz ganz ohne Composer, funktioniert aber genauso gut mit.

So sieht es aus

Ein Ausschnitt aus einer typischen Seite mit Vererbung, einer Bedingung und einer Schleife:

{extends 'layout.tpl'}
{block content}
  {if $user}
    Hallo {$user->name}!
  {else}
    Hallo Gast!
  {/if}

  <ul>
  {foreach $items as $item}
    <li>{$item.name} – {$item.price|number_format:2}€</li>
  {/foreach}
  </ul>
{/block}

Sicherheit ist kein Nachgedanke

Die Ausdrucks-Grammatik ist die zentrale Sicherheitsmaßnahme der Engine, keine nachträgliche Filterung. Pfade für {include} und Konfigurationsdateien werden per realpath() aufgelöst und gegen das erlaubte Verzeichnis geprüft, bevor eine Datei gelesen wird. In v15 wurde die Engine zusätzlich extern auditiert – alle gefundenen Punkte sind behoben, siehe die Versionshinweise.

Bereit loszulegen?

In wenigen Minuten läuft die erste Seite – der Schnellstart zeigt jeden Schritt.