Kein eval()
Jeder Ausdruck läuft durch einen rekursiven Grammatik-Parser statt durch preg_replace-Codegenerierung. Funktionsaufrufe, "::" und Methodenaufrufe sind kategorisch ausgeschlossen.
PHP Template Engine
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
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.
Jeder Ausdruck läuft durch einen rekursiven Grammatik-Parser statt durch preg_replace-Codegenerierung. Funktionsaufrufe, "::" und Methodenaufrufe sind kategorisch ausgeschlossen.
{$var}-Ausgaben werden standardmäßig HTML-escaped. Wer roh ausgeben will, muss das mit |raw explizit anfordern – nie umgekehrt.
{extends}, {block}, {parent} und {include} für wiederverwendbare Layouts, plus {function} für eigene Template-Makros.
Optional einschränkbar: erlaubte Modifier, sichtbare PHP-Konstanten, zusätzliche Template-Verzeichnisse, {eval} sperren, {fetch} nur mit expliziter Freigabe.
Kompilierte Templates werden gecacht, ganze Seiten optional per display($tpl,$id,$lifetime) – dynamische Inseln bleiben über {nocache} live.
Reines PHP 8.1+, eigener PSR-4-Autoloader für den Einsatz ganz ohne Composer, funktioniert aber genauso gut mit.
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}
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.
In wenigen Minuten läuft die erste Seite – der Schnellstart zeigt jeden Schritt.