如何在Twig过滤器'replace'中使用变量

8

从php中传递一个数组的方式

$repl_arr = array('serach-string1' => 'replace1', ...) 

我想通过替换过滤器在Twig模板中替换Twig变量中的字符串,类似于以下方式:

{{ block | replace({ repl_arr }) }}

那个不起作用,就像变量循环一样

{% for key,item in repla_arr %}
  {% set var = block | replace({ key : item }) %}
{% endfor %}

它有什么问题?它该如何工作?


你能给我一个例子(只需要一个好的例子)展示block变量的样子,然后我就会有解决方案了。 - Alvin Bunk
DarkBee的答案非常好地描述了使用哈希(数组)替换过滤器的用法。@alvin-bunk 第二点确实是变量'block'。它是一个渲染数组(我没有考虑到这一点)。所以replace不能与它一起使用。当我执行以下操作时{% set output %} {{ block }} {% endset %} {{ output | replace(replaces) }} 然后像<这样的HTML字符被转义。 - drmind
看起来我找到了它,使用 {% autoescape false %} ... {% endautoescape %} 输出。 - drmind
1个回答

12

要么传入整个数组,要么循环替换。

但是在循环替换时,您需要将 keyvalue 用括号括起来,以强制进行插值处理。

{% set replaces = {
    '{site}'     : '{stackoverflow}',
    '{date}'  : "NOW"|date('d-m-Y'),
} %}

{% set haystack = '{site} foobar {site} {date} bar' %}


{{ haystack | replace(replaces) }}

{% set output = haystack %}
{% for key, value in replaces %}
    {% set output = output|replace({(key) : (value),}) %}
{% endfor %} 
{{ output }}

fiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接