原始树枝变量过滤器在短的if内

时间:2015-06-04 11:15:44

标签: html symfony twig

我正在使用短条件来区分记录列表中显示的值。

例如,如果我希望标识符大于100的客户的名称强调<em> </em>),请执行以下操作:

{# Displays the identifier of the client #}
{% set strClient = '<em>' ~ client.name ~ '</em>' %}
{{ Client.id > 100 ? strClient|raw : client.name }}

此处浏览器处理HTML ,客户名称显示为强调,事实是,例如,如果您要显示您的手机,则可以为null或不,如果没有显示消息强调;我执行以下操作:

{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>' }}

在后一种情况下,浏览器不会处理 HTML标记并显示为纯文本,我也尝试了以下内容:

{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>'|raw }}

这一个:

{# Displays the customer phone or message if there #}
{% set strClient = '<em> Not found </em>' %}
{{ Client.id > 100 ? client.tel : strClient|raw }}

使用相同的结果,即何时是字符串,存储在变量中,或者不会获得始终显示为处理明文的HTML标记。

是否有人知道如何解释树枝中的HTML字符串?

2 个答案:

答案 0 :(得分:4)

当使用带有tenary的原始过滤器时,如果需要将整个语句包装在括号中以使其工作。

E.g。 {{ (Client.id > 100 ? client.tel : '<em> Not found </em>')|raw }}

答案 1 :(得分:2)

在我对你的例子的测试中,没有任何尝试有效,包括你的第一个例子:

{# Displays the identifier of the client #}
{% set strClient = '<em>' ~ client.name ~ '</em>' %}
{{ Client.id > 100 ? strClient|raw : client.name }}

但是,如果您使用{% autoescape false %}{% endautoescape %}包装示例,则应解决此问题。如果包装如下,所有示例都应按预期显示:

{% autoescape false %}
{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>' }}
{% endautoescape %}

如果使用autoescape,则无需|raw