Twig – silnik szablonów
Twig to nowoczesny, wydajny i open source silnik szablonów przeznaczony głównie do pracy z językiem PHP. Został stworzony w 2009 roku przez Fabiena Potenciera i od tego czasu stał się domyślnym systemem szablonów w wielu popularnych frameworkach, takich jak Symfony, Laravel oraz w systemach zarządzania treścią typu Drupal i Craft CMS.
Historia i rozwój
- 2009 – pierwsza wersja Twig (v1.0) została wydana jako część projektu Symfony 2.
- 2011 – Twig zyskał samodzielną nazwę i rozdzielono go od kodu Symfony, co umożliwiło szerokie zastosowanie w innych projektach.
- 2013 – wydano wersję 1.10 z obsługą cache’owania skompilowanych szablonów.
- 2016 – wprowadzono wersję 2.x, dodając wsparcie dla PHP 7 oraz nowe funkcje językowe.
- 2020 – wydano wersję 3.x, kompatybilną z PHP 8 i oferującą ulepszoną bezpieczeństwo oraz rozszerzoną składnię.
Kluczowe cechy
- Wydajność – Twig kompiluje szablony do natywnych plików PHP, co zapewnia bardzo szybkie działanie.
- Bezpieczeństwo – automatyczne escapowanie wyjścia chroni przed atakami XSS.
- Czytelna składnia – używa prostych znaczników
{{ zmienna }}i bloków kontrolnych{% if ... %}, co ułatwia współpracę projektantów i programistów. - Rozszerzalność – można definiować własne filtry, funkcje i testy w PHP.
- Wsparcie dla dziedziczenia szablonów – mechanizm
{% extends %}i{% block %}umożliwia tworzenie hierarchii szablonów. - Integracja z architekturą MVC – Twig doskonale współgra z warstwą widoku w frameworkach MVC.
Podstawowa składnia
Poniżej przedstawiono najważniejsze elementy języka Twig.
{# komentarz w Twig #}
<!DOCTYPE html>
<html>
<head>
<title>{{ title|e }}</title>
</head>
<body>
{% if user %}
<p>Witaj, {{ user.name|capitalize }}!</p>
{% else %}
<p>Witaj, gościu!</p>
{% endif %}
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% else %}
<li>Brak elementów.</li>
{% endfor %}
</ul>
{# dziedziczenie szablonu #}
{% extends 'base.html.twig' %}
{% block content %}
<h1>{{ heading }}</h1>
{{ content|raw }}
{% endblock %}
</body>
</html>
Integracja z frameworkami
Symfony
W Symfony Twig jest domyślnym silnikiem szablonów. Konfigurację znajdziemy w pliku config/packages/twig.yaml. Dzięki wbudowanemu cache’owi szablony są kompilowane tylko w środowisku produkcyjnym.
Laravel
Laravel oferuje opcjonalną integrację z Twig poprzez pakiet twigbridge. Po instalacji można używać szablonów Twig obok natywnych Blade.
Drupal
Od wersji Drupal 8, Twig zastąpił legacy’owy system szablonów PHP. Wymuszono twarde zasady bezpieczeństwa (automatyczne escapowanie) oraz wsparcie dla tematyzacji poprzez theme hooks.
Porównanie z innymi silnikami szablonów
| Cecha | Twig | Smarty | Blade (Laravel) | Mustache |
|---|---|---|---|---|
| Kompletność funkcji | Wysoka – filtry, testy, funkcje | Średnia – mniej wbudowanych filtrów | Średnia – specyficzna dla Laravel | Niska – brak logiki w szablonie |
| Wydajność | Kompilacja do PHP | Kompilacja do PHP | Kompilacja do PHP | Interpretacja w runtime |
| Bezpieczeństwo | Automatyczne escapowanie | Opcjonalne | Automatyczne escapowanie | Brak, musi być dodane ręcznie |
| Wsparcie społeczności | Silne – szerokie użycie w Symfony, Drupal, Laravel | Umiarkowane | Wysokie w ekosystemie Laravel | Rozproszone |
Przykłady zastosowań
- Tworzenie szablonów stron internetowych w projektach web development.
- Budowanie systemów CMS i platform e‑commerce.
- Generowanie raportów e‑mailowych.
- Obsługa warstwy widoku w aplikacjach opartych na MVC.
Rozszerzenia i ekosystem
W ekosystemie Twig istnieje wiele przydatnych rozszerzeń:
- Twig Extensions – zestaw dodatkowych filtrów i funkcji, m.in.
date,number_format. - Twig Extra – moduły dodatkowe, takie jak
IntlExtension(formatowanie dat i liczb wg locale) orazHTMLExtraExtension(bezpieczne tworzenie tagów HTML). - Profiler – integracja z narzędziem Symfony Profiler umożliwiająca analizę wydajności szablonów.
Licencja
Twig jest udostępniany na licencji MIT, co pozwala na dowolne wykorzystanie w projektach komercyjnych i niekomercyjnych.