如何传递当前上下文以包含在 Twig 中?
How to pass the current context to include in Twig?
假设我有以下 headline.twig
部分:
<h2>{{ headline }}</h2>
我想把它放在两个地方,一次是:
<% for article in teasers %>
{{ include('headline.twig') }}
<% endfor %>
然后简单地:
{{ include('headline.twig') }}
是否可以传递一个 include
标签或函数其上下文,以便包含 "knows" ,在第一个实例中 headline
变量实际上是 article.headline
?
我正在寻找一种系统的方法来做到这一点,而不是像
{{ include('headline.twig', {headline: article.headline}) }}
默认情况下,整个上下文都传递给包含的模板。
所以它将在 headline.twig
:
中工作
<h2>{{ article.headline }}</h2>
然后在主模板中你只调用:
{% include('headline.twig') %}
但是 article
变量必须在调用时定义 include
。
如果您希望 headline
在所有情况下都位于包含文件的主要上下文中,您可以这样做:
{% for article in teasers %}
{% set headline = article.headline %}
{{ include('headline.twig') }}
{% endfor %}
但是,如果您以这种方式重新设置它,这将覆盖当前上下文中任何现有的 headline
变量(并且有可能重复 teasers.article.headline
的最后一次迭代 2 次)。
如果您想保留当前上下文并覆盖 headline
变量,最好的解决方案是使用 merge
过滤器:
{% for article in teasers %}
{{ include('headline.twig', _context|merge({headline: article.headline})) }}
{% endfor %}
假设我有以下 headline.twig
部分:
<h2>{{ headline }}</h2>
我想把它放在两个地方,一次是:
<% for article in teasers %>
{{ include('headline.twig') }}
<% endfor %>
然后简单地:
{{ include('headline.twig') }}
是否可以传递一个 include
标签或函数其上下文,以便包含 "knows" ,在第一个实例中 headline
变量实际上是 article.headline
?
我正在寻找一种系统的方法来做到这一点,而不是像
{{ include('headline.twig', {headline: article.headline}) }}
默认情况下,整个上下文都传递给包含的模板。
所以它将在 headline.twig
:
<h2>{{ article.headline }}</h2>
然后在主模板中你只调用:
{% include('headline.twig') %}
但是 article
变量必须在调用时定义 include
。
如果您希望 headline
在所有情况下都位于包含文件的主要上下文中,您可以这样做:
{% for article in teasers %}
{% set headline = article.headline %}
{{ include('headline.twig') }}
{% endfor %}
但是,如果您以这种方式重新设置它,这将覆盖当前上下文中任何现有的 headline
变量(并且有可能重复 teasers.article.headline
的最后一次迭代 2 次)。
如果您想保留当前上下文并覆盖 headline
变量,最好的解决方案是使用 merge
过滤器:
{% for article in teasers %}
{{ include('headline.twig', _context|merge({headline: article.headline})) }}
{% endfor %}