Support
Häufig gestellte Fragen
Antworten zu Sicherheit, Systemvoraussetzungen und den Grenzen der Engine. Fehlt etwas? Die vollständige Anleitung findet sich in GUIDE.md im Download-Paket.
Was unterscheidet UIEngine von Twig oder Smarty?
UIEngine verfolgt dieselbe Grundidee (Trennung von Logik und Darstellung, eigene Template-Syntax), ist aber bewusst kompakt gehalten: keine externen Abhängigkeiten, ein einziger, klar lesbarer Grammatik-Parser für Ausdrücke, und eine eingebaute, optionale Security-Policy-Sandbox für Umgebungen mit mehreren, unterschiedlich vertrauenswürdigen Template-Autoren.
Verwendet UIEngine intern eval()?
Nein. Jeder Ausdruck (in {if}, {math}, Plugin-Argumenten, Variablen und Modifiern) läuft durch einen rekursiven Grammatik-Parser (ExpressionCompiler), der nur eine feste Menge an Konstrukten zulässt. Funktionsaufrufe, Methodenaufrufe und "::" sind kategorisch ausgeschlossen.
Welche PHP-Version wird benötigt?
PHP 8.1 oder neuer. Die Engine nutzt moderne Sprachfeatures wie readonly-Properties, match-Ausdrücke und Nullsafe-Operatoren im generierten Code.
Brauche ich Composer?
Nein, ist aber unterstützt. Ohne Composer reicht es, den Ordner zu kopieren und UIEngine/src/Autoload.php einzubinden – ein schlanker, eigener PSR-4-Autoloader übernimmt den Rest. Mit Composer wird stattdessen automatisch dessen Autoloader verwendet.
Was macht die Security-Policy-Sandbox genau?
Sie schränkt eine bereits sichere Engine zusätzlich weiter ein: erlaubte Modifier auf eine Whitelist begrenzen, sichtbare PHP-Konstanten über {$engine.const.*} einschränken, zusätzliche Template-Verzeichnisse freigeben, {eval} komplett sperren und {fetch} nur für explizit freigegebene Datei-/URL-Präfixe erlauben. Sinnvoll, sobald mehrere, unterschiedlich vertrauenswürdige Template-Autoren dieselbe Engine-Instanz nutzen.
Wie funktioniert das Caching?
Kompilierte Templates werden als PHP-Dateien im Cache-Verzeichnis abgelegt und nur bei Änderung neu kompiliert. Zusätzlich lässt sich mit display($template, $cacheId, $lifetime) die komplette gerenderte Seite cachen – Abschnitte innerhalb von {nocache}...{/nocache} bleiben dabei trotzdem bei jedem Aufruf dynamisch.
Kann ich eigene Tags, Modifier oder Plugins registrieren?
Ja, auf drei Ebenen: einfache Funktions-Plugins über register(), Block-Plugins über registerBlock() (transformieren bereits gerenderten Inhalt) und vollständige Compiler-Plugins über registerCustomTag() für komplett neue Tag-Syntax.
Eignet sich UIEngine für mehrere, unabhängige Template-Autoren auf derselben Installation?
Ja, genau dafür gibt es die SecurityPolicy-Sandbox. Ohne gesetzte Policy verhält sich die Engine offen (für eine einzelne, vertrauenswürdige Codebasis gedacht); mit gesetzter Policy lassen sich Modifier, Konstanten und Dateizugriffe pro Instanz gezielt einschränken.
Wo finde ich die vollständige Dokumentation?
Im Download-Paket liegt GUIDE.md mit 17 Abschnitten von der Installation über jedes Sprachfeature bis zur Fehlersuche, jeweils mit lauffähigen Beispielen. Diese Website fasst die wichtigsten Punkte zusammen, ersetzt die ausführliche Anleitung aber nicht vollständig.
Wie melde ich eine Sicherheitslücke?
Über die im Download-Paket hinterlegten Kontaktangaben, mit möglichst genauer Beschreibung und einem minimalen Reproduktionsbeispiel. Die Engine wurde bereits mindestens einmal extern auditiert (siehe Changelog v15); weitere Hinweise sind ausdrücklich willkommen.
Antwort nicht gefunden?
Die ausführliche Anleitung deckt jedes Sprachfeature mit lauffähigen Beispielen ab.