Twig (template engine)

Template engine From Wikipedia, the free encyclopedia

Twig is a template engine for the PHP programming language. Its syntax originates from Jinja and Django templates.[3] It's an open source product[4] licensed under a BSD License and maintained by Fabien Potencier. The initial version was created by Armin Ronacher. Symfony PHP framework comes with a bundled support for Twig as its default template engine since version 2.[5]

Initial releaseOctober 12, 2009 (2009-10-12)
Stable release
3.22.1[2] / 16 November 2025; 4 months ago (16 November 2025)
Quick facts Original authors, Developer ...
Twig
Original authorsArmin Ronacher,[1] Fabien Potencier
DeveloperSymfony SAS
Initial releaseOctober 12, 2009 (2009-10-12)
Stable release
3.22.1[2] / 16 November 2025; 4 months ago (16 November 2025)
Written inPHP
Operating systemCross-platform
TypeTemplate engine
LicenseBSD License
Websitetwig.symfony.com
Repository
Close

The same template language is used by the Nunjucks template engine, thus Nunjucks is also supported by the following tools.

Features

  • Complex control flow
  • Automatic escaping
  • Template inheritance
  • Variable filters[6]
  • i18n support (gettext)
  • Macros
  • Fully extendable[3][7]

Twig is supported by the following integrated development environments:[3]

  • Eclipse via the Twig plugin
  • Komodo and Komodo Edit via the Twig highlight/syntax check mode
  • NetBeans via the Twig syntax plugin (until 7.1, native as of 7.2)
  • PhpStorm (native as of 2.1)
  • IntelliJ IDEs, including WebStorm, via a plugin

And the text editors:

Syntax

Twig defines three kinds of delimiters:

  • {{ ... }}, to print the content of variables or the result of evaluating an expression (e.g.: an inherited Twig template with {{ parent() }}).
  • {# ... #}, to add comments in the templates. These comments aren't included in the rendered page.
  • {% ... %}, to execute statements, such as for-loops.
    • {% set foo = 'bar' %}, to assign.[8]
    • {% if i is defined and i == 1%} ... {% endif %}: condition.
    • {% for i in 0..10 %} ... {% endfor %}: counter in a loop.

The apostrophe (') is the escape character.

To create an iterative array:

{% set myArray = [1, 2] %}

An associative array:

{% set myArray = {'key': 'value'} %}

Operators precedence

The operators precedence is,[3] from the less to more priority:

More information Operator, Role ...
OperatorRole
orOr
xorXor
andAnd
b-orBitwise OR
b-xorBitwise XOR
b-andBitwise AND
==Is equal?
!=Is different?
<Inferior
>Superior
>=Superior or equal
<=Inferior or equal
inInto
matchesCorresponds
starts withBegins by
ends withFinishes by
..Sequence (ex: 1..5)
+Plus
-Less
~Concatenation
*Multiplication
/Division
//Division rounded to lower
%Modulo
isTest (ex: is defined or is not empty)
**Power
|Filter[6]
[]Array entry
.Attribute or method from an object (ex: country.name)
Close

Filters

The filters provide some treatments on an expression, when placed after it, separated by pipes. For example:[6]

  • capitalize: changes a string's first letter to capital.
  • upper: changes a whole string to capital.
  • first: displays the first line of an array.
  • length: returns a variable size.

Special variables

  • loop contains the current loop information. For example loop.index corresponds to the number of iterations which have already occurred.
  • The global variables begin with underscores. For example:
    • _route (URL part located after the domain)
    • _self (current file name)
    So, to the a page route: {{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
  • The CGI environment variables, such as {{ app.request.server.get('SERVER_NAME') }}.

Example

The example below demonstrates some basic features of Twig.

{% extends "base.html" %}
{% block navigation %}
    <ul id="navigation">
    {% for item in navigation %}
        <li>
            <a href="{{ item.href }}">
                {% if item.level == 2 %}&nbsp;&nbsp;{% endif %}
                {{ item.caption|upper }}
            </a>
        </li>
    {% endfor %}
    </ul>
{% endblock navigation %}

Real world usage

Twig has become a widely adopted templating engine in the PHP ecosystem. It is the default templating language for the Symfony framework and is also integrated into several content management systems (CMS) and applications, including:

  • Drupal adopted Twig as its default template engine starting from version 8, replacing PHPTemplate.
  • CraftCMS uses Twig as its sole templating language, allowing developers to create highly customised front-end experiences.
  • eZ Platform (Ibexa) integrates Twig for rendering templates within its content management system.
  • Bolt CMS uses Twig for theming and front-end rendering.
  • ShopWired uses Twig for theming and front-end rendering.

Twig is also employed in many custom PHP applications where secure and readable templating are important. The similarity of Twig to Jinja and Django templates has also made it familiar to developers coming from Python and other similar ecosystems.

See also

References

Related Articles

Wikiwand AI