Twig安全html在宏内部不起作用

时间:2016-04-22 14:18:53

标签: symfony twig

在安全内容上使用twig宏似乎删除了安全标志

{% macro identity(value) %}
     {{ value }}
{% endmacro %}
{{  "<br>"| raw }}
{{ _self.identity(  "<br>"| raw) }}
{% autoescape false %}
    {{ _self.identity(  "<br>"| raw) }}
{% endautoescape %}

上面的代码只显示了2 <br>。有没有办法禁用转义,或者在不编辑我的树枝宏的情况下将我的内容标记为安全?

1 个答案:

答案 0 :(得分:0)

你确实是正确的,你必须将原始过滤器放在宏中,以便保持宏内的任何标签不会逃避输入,这至少在我看来是预期的行为。

在Twig中,宏不是函数或过滤器,它们只是简单的快捷方式,可以防止重复样板标签和代码。在创建和使用宏时,每次使用它时都要考虑编写整个代码,即

而不是将您的宏视为一个调用{{ _self.identity( "<br>"| raw ) }}实际上认为您正在编写的内容是{{ {{ "<br>"| raw }} }},因为您将宏输入的输出作为文字传递,而不是你写的表达。

如果您希望您的宏使用提供的输入作为模板进行操作,而不是按照设计操作输入任何传入的输出,您可以查看启用template_from_string功能。