Hubbry Logo
search button
Sign in
Twig (template engine)
Twig (template engine)
Comunity Hub
History
arrow-down
starMore
arrow-down
bob

Bob

Have a question related to this hub?

bob

Alice

Got something to say related to this hub?
Share it here.

#general is a chat channel to discuss anything related to the hub.
Hubbry Logo
search button
Sign in
Twig (template engine)
Community hub for the Wikipedia article
logoWikipedian hub
Welcome to the community hub built on top of the Twig (template engine) Wikipedia article. Here, you can discuss, collect, and organize anything related to Twig (template engine). The purpose of the hub i...
Add your contribution
Twig (template engine)
Twig
Original author(s)Armin Ronacher,[1] Fabien Potencier
Developer(s)Symfony SAS
Initial releaseOctober 12, 2009 (2009-10-12)
Stable release
3.21.1[2] / 3 May 2025; 3 months ago (3 May 2025)
Repository
Written inPHP
Operating systemCross-platform
TypeTemplate engine
LicenseBSD License
Websitetwig.symfony.com

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]

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

Features

[edit]
  • 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

[edit]

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

[edit]

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

Operator Role
b-and Bitwise AND
b-xor Bitwise XOR
b-or Bitwise OR
or Or
and And
== Is equal?
!= Is different?
< Inferior
> Superior
>= Superior or equal
<= Inferior or equal
in Into
matches Corresponds
starts with Begins by
ends with Finishes by
.. Sequence (ex: 1..5)
+ Plus
- Less
~ Concatenation
* Multiplication
/ Division
// Division rounded to lower
% Modulo
is Test (ex: is defined or is not empty)
** Power
| Filter[6]
[] Array entry
. Attribute or method from an object (ex: country.name)

Filters

[edit]

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

[edit]
  • 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

[edit]

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 %}

See also

[edit]

References

[edit]
  1. ^ "mitsuhiko/twig". GitHub. August 13, 2019.
  2. ^ "Release 3.21.1". 3 May 2025. Retrieved 1 June 2025.
  3. ^ a b c d "Twig for Template Designers - Documentation - Twig - The flexible, fast, and secure PHP template engine". Twig.
  4. ^ "twigphp/Twig". GitHub. July 1, 2020.
  5. ^ "Symfony2 Documentation — Documentation". Twig. August 5, 2010. Archived from the original on 2010-08-05.
  6. ^ a b c "Filters - Documentation - Twig - The flexible, fast, and secure PHP template engine". Twig.
  7. ^ "Extending Twig - Documentation - Twig - The flexible, fast, and secure PHP template engine". Twig.
  8. ^ "set - Documentation - Twig - The flexible, fast, and secure PHP template engine". Twig.
[edit]