Change record status: 
Project: 
Introduced in branch: 
8.9.x
Introduced in version: 
8.9.0-alpha1
Description: 

Sometimes, you need to move a bunch of fields out of the {{ content }} array and render them elsewhere in your template.

However, you definitely have to render {{ content }} somewhere, or you don't get the expected cache tags for your output.

To avoid the fields showing up twice, you're supposed to do something like this:

  <div class="somewhere-fancy">
    {{ content.field_1 }}
    {{ content.field_2 }}
  </div>
  <div class="content">
    {{ content|without('field_1', 'field_2') }}
  </div>

That works okay if you're only dealing with a small number of fields, but sometimes you need to move a lot of fields elsewhere in the template. This gets clumsy.

So the without() filter now takes both strings and Twig arrays as arguments.

Before

<article>
  <div class="fancy">
    {{ content.field_fancy_1 }}
    {{ content.field_fancy_2 }}
    {{ content.field_fancy_3 }}
    {{ content.field_fancy_4 }}
  </div>
  <div class="important">
    {{ content.field_important_1 }}
    {{ content.field_important_2 }}
    {{ content.field_important_3 }}
    {{ content.field_important_4 }}
  </div>
  <div class="content">
    {{ content|without('field_fancy_1', 'field_fancy_2', 'field_fancy_3', 'field_fancy_4', 'field_important_1', 'field_important_2', 'field_important_3', 'field_important_4', 'field_special') }}
  </div>
  <div class="special">
    {{ content.field_special }}
  </div>
</article>

After

{%
  set fancy_fields = [
    'field_fancy_1',
    'field_fancy_2',
    'field_fancy_3',
    'field_fancy_4',
  ]
%}
{%
  set important_fields = [
    'field_important_1',
    'field_important_2',
    'field_important_3',
    'field_important_4',
  ]
%}
<article>
  <div class="important">
    {% for field in important_fields %}
      {{ content[field] }}
    {% endfor %}
  </div>
  <div class="fancy">
    {% for field in fancy_fields %}
      {{ content[field] }}
    {% endfor %}
  </div>
  <div class="content">
    {{ content|without(fancy_fields, important_fields, 'field_special') }}
  </div>
  <div class="special">
      {{ content.field_special }}
  </div>
</article>
Impacts: 
Themers