Wsparcie

Najczęściej zadawane pytania

Odpowiedzi na temat bezpieczeństwa, wymagań systemowych i granic silnika. Czegoś brakuje? Pełna instrukcja znajduje się w GUIDE.md w paczce do pobrania.

Czym UIEngine różni się od Twiga lub Smarty?

UIEngine podąża za tą samą podstawową ideą (rozdzielenie logiki od prezentacji, własna składnia szablonów), ale jest celowo kompaktowy: brak zewnętrznych zależności, jeden, czytelny parser gramatyki dla wyrażeń oraz wbudowana, opcjonalna piaskownica polityki bezpieczeństwa dla środowisk z wieloma autorami szablonów o różnym poziomie zaufania.

Czy UIEngine wewnętrznie używa eval()?

Nie. Każde wyrażenie (w {if}, {math}, argumentach pluginów, zmiennych i modyfikatorach) przechodzi przez rekurencyjny parser gramatyki (ExpressionCompiler), który dopuszcza tylko ustalony zestaw konstrukcji. Wywołania funkcji, metod i "::" są kategorycznie wykluczone.

Jaka wersja PHP jest wymagana?

PHP 8.1 lub nowszy. Silnik wykorzystuje nowoczesne funkcje języka, takie jak właściwości readonly, wyrażenia match i operatory nullsafe w generowanym kodzie.

Czy potrzebuję Composera?

Nie, ale jest obsługiwany. Bez Composera wystarczy skopiować folder i dołączyć UIEngine/src/Autoload.php – resztą zajmuje się lekki, własny autoloader PSR-4. Z Composerem automatycznie używany jest jego autoloader.

Co dokładnie robi piaskownica polityki bezpieczeństwa?

Dodatkowo ogranicza i tak już bezpieczny silnik: ogranicza dozwolone modyfikatory do białej listy, ogranicza widoczne stałe PHP przez {$engine.const.*}, udostępnia dodatkowe katalogi szablonów, całkowicie blokuje {eval} i zezwala na {fetch} tylko dla jawnie dozwolonych prefiksów plików/URL. Przydatne, gdy wielu autorów szablonów o różnym zaufaniu korzysta z tej samej instancji silnika.

Jak działa cache?

Skompilowane szablony są zapisywane jako pliki PHP w katalogu cache i ponownie kompilowane tylko przy zmianie. Dodatkowo display($template, $cacheId, $lifetime) może cache’ować całą wyrenderowaną stronę – sekcje wewnątrz {nocache}...{/nocache} i tak są ponownie obliczane przy każdym żądaniu.

Czy mogę rejestrować własne tagi, modyfikatory lub pluginy?

Tak, na trzech poziomach: proste pluginy funkcyjne przez register(), pluginy blokowe przez registerBlock() (przekształcają już wyrenderowaną treść) oraz pełne pluginy kompilatora przez registerCustomTag() dla zupełnie nowej składni tagów.

Czy UIEngine nadaje się dla wielu, niezależnych autorów szablonów w tej samej instalacji?

Tak, dokładnie do tego służy piaskownica SecurityPolicy. Bez ustawionej polityki silnik zachowuje się otwarcie (pomyślany dla pojedynczej, zaufanej bazy kodu); z ustawioną polityką modyfikatory, stałe i dostęp do plików można ograniczać dla poszczególnych instancji.

Gdzie znajdę pełną dokumentację?

Paczka do pobrania zawiera GUIDE.md z 17 rozdziałami, od instalacji przez każdą funkcję języka aż po rozwiązywanie problemów, każdy z działającymi przykładami. Ta strona podsumowuje najważniejsze punkty, ale nie zastępuje w pełni szczegółowej instrukcji.

Jak zgłosić lukę bezpieczeństwa?

Poprzez dane kontaktowe zawarte w paczce do pobrania, z możliwie dokładnym opisem i minimalnym przykładem odtworzenia problemu. Silnik przeszedł już co najmniej jeden zewnętrzny audyt (zobacz changelog v15); dalsze zgłoszenia są wyraźnie mile widziane.

Nie znalazłeś odpowiedzi?

Szczegółowa instrukcja obejmuje każdą funkcję języka wraz z działającymi przykładami.