如何在树枝中的template_from_string内部注入变量?

时间:2019-07-25 12:49:28

标签: twig

我想在循环内使用模板变量(作为字符串)。

{# Define my template #}
{% set my_template %}
    <span>{{ job.title }}</span>
    ...
{% endset %}

{# Using the template inside a loop #}
{% for job in jobs %}
    {{ include(template_from_string(my_template), { 'job', job }) }}
{% endfor %}

我希望它显示带有“作业”对应值的模板内容,但是出现错误:“未定义可变作业”

3 个答案:

答案 0 :(得分:0)

使用宏 https://twig.symfony.com/doc/2.x/tags/macro.html

{% macro my_template(job) %}
    <span>{{ job.title }}</span>
    ...
{% endset %}

{# Using the template inside a loop #}
{% for job in jobs %}
    {{ include(template_from_string(_self.my_template(job)), { 'job', job }) }}
{% endfor %}

答案 1 :(得分:0)

我认为您的include调用在传递参数时出错。您正在提供常规数组而不是哈希(使用逗号而不是冒号):

{{ include(template_from_string(_self.my_template(job)), { 'job': job }) }}

答案 2 :(得分:0)

另一种选择是使用 verbatim 标签。 这会停止 twig 解析变量,并强制使用字符串,以便我们稍后可以作为 twig 模板运行。

没有 verbatim

{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}

{% set my_template %}
  <span>{{ job }}</span>
{% endset %}

{# Using the template inside a loop #}
{% for job in jobs %}
  {{ include(template_from_string(my_template), { 'job': job }) }}
{% endfor %

输出:outside outside(错误)

verbatim

{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}

{% set my_template %}
  {% verbatim  %}
    <span>{{ job }}</span>
  {% endverbatim %}
{% endset %}

{# Using the template inside a loop #}
{% for job in jobs %}
  {{ include(template_from_string(my_template), { 'job': job }) }}
{% endfor %

输出:11 22(正确)

奖励 - Drupal - 没有 template_from_string() With verbatim:

{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}

{% set my_template %}
  {% verbatim  %}
    <span>{{ job }}</span>
  {% endverbatim %}
{% endset %}

{# Using the template inside a loop #}
{% for job in jobs %}
  {{ {'#type': 'inline_template', '#template': my_template, '#context': {'job': job} } }}
{% endfor %

输出:11 22(正确)