使用Twig的三元运算符时,一切都按预期运行除了条件为假时未应用|raw
过滤器:
{{ thing.description|length > 255 ? thing.description|striptags|slice(0,255) ~ '...' : thing.description|raw }}
如果为true,则应用|striptags|slice(0,255)
过滤器。
|raw
过滤器在编码时会被应用(和false):
{% if thing.description|length > 255 %}
{{ thing.description|striptags|slice(0,255) ~ '...' }}
{% else %}
{{ thing.description|raw }}
{% endif %}
对于我的生活,我无法弄清楚为什么|raw
在使用三元语法时不适用。
答案 0 :(得分:4)
In fact |raw
do nothing. Really. Look at its code here.
执行操作时,值标记为不安全。 |raw
将其标记为安全。如果您尝试使用{{ ... }}
打印不安全的值,它将被转义。它是如何设计Twig的。
让我们分析一下这个简单的代码:{{ (a|raw) ~ (b|raw) }}
a
被标记为安全。b
被标记为安全。a
和b
粘在一起。它被标记为不安全,因为~
是一项操作。a ~ b
打印 ESCAPED 。哇。您必须使用{{ (a ~ b)|raw }}
。
在您的问题中:首先计算thing.description|raw
,然后将其传递给三元组。结果被标记为不安全,因为三元是操作。在所有操作之后,您必须使用|raw
,因此{% if %}
是唯一的解决方案。