Skip to main content
drupalreleases

Use direct release data with your AI assistant.

Learn more

Twig Capture

Security covered Maintenance fixes only 49 sites

Part of the Twig ecosystem · 43 projects

This module automatically fixes a common bug in Twig templates where rendering content within an `if` statement could cause it to be rendered twice, leading to performance issues or unexpected behavior like form double submissions. It optimizes by capturing the rendered content in a variable for a single output.

Enabling this module has no visible effect whatsoever to end users and even developers need to read the compiled twig files to see any changes so almost always it is completely invisible. It is, however a bugfix to a common bug and a potential performance boost.

The bug is in a common pattern used to check whether a render array is empty followed by printing the variable (#327 and #333 in this core issue):

{% if content.body | render %}
<div>
{{ content.body }}
</div>
{% endif %}

TLDR for the rest: this code can be kept like as is despite it has a bug and this module automatically fixes the bug.

This code will render content.body twice any time it is not empty -- that's the bug. Most of the time this bug avoids detection because it's merely a performance hit. However, if it hits a form (for example a webform) that form will double submit. Any number of subtler issues might occur because of the unexpected double rendering -- for example if a form has an id "foo" then the expectation is <form id="foo"> but <form id="foo--1"> will appear instead. When the form is rendered first, Drupal will think the HTML ID "foo" is used and won't realize the {% if %} throws this HTML away and so it assigns a unique ID to the form when it is rendered the second time.

The recommended bugfix is something like:

{% set body_rendered = content.body | render %}
{% if  body_rendered %}
<div>
{{ body_rendered }}
</div>
{% endif %}

Writing this manually every time an empty check is followed by a print is extremely tedious and bug prone. The module does this conversion automatically: it captures the result of the render filter in a variable and if the same thing is later printed then it prints the variable containing the capture instead.

Drupal 10–11

Ask your assistant about Twig Capture

Check compatibility with your Drupal and PHP version, maintenance and security coverage, from current release data. How it works

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
4
Tracked since
Jan 2023
Latest release
1 year ago
Releases (12 mo)
0 ▼ from 2
Maintenance
Slowing

Release Timeline

Releases

Version Type Core PHP Release date
1.0.3 Stable 10–11 Feb 19, 2025
1.0.2 Stable 10–11 Dec 20, 2024
1.0.1 Stable 9–10 Jan 30, 2023
1.x-dev Dev 10–11 Jan 30, 2023