encyklopedia.space

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ń

  1. Tworzenie szablonów stron internetowych w projektach web development.
  2. Budowanie systemów CMS i platform e‑commerce.
  3. Generowanie raportów e‑mailowych.
  4. 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) oraz HTMLExtraExtension (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.

Patrz także