Twig - 插值变量

5

我有以下内容:

{% if promo.monday_unavailable == 1 %} 
    not available mondays 
{% elseif promo.monday_available == 1%}
    available mondays 
{% else %}
    available mondays from {{promo.monday_start}} until {{promo.monday_end}}
{% endif %}
<br />
{% if promo.tuesday_unavailable == 1 %} 
    not available tuesdays 
{% elseif promo.tuesday_available == 1%}
    available tuesdays 
{% else %}
    available tuesdays from {{promo.tuesday_start}} until {{promo.tuesday_end}}
{% endif %}
<br />

我可以为每个星期的每一天做的事情。

我想知道是否有一种方法可以简化代码,使其更易读。

{% for i in ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'] %}

{% if promo.~i~"_unavailable" == 1 %} 
    not available mondays 
{% elseif promo.~i~"_available" == 1%}
    available mondays 
{% else %}
    available mondays from {{promo.~i~"_start"}} until {{promo.~i~"_end"}}
{% endif %}
<br />

{% endfor %}

使用Twig。

非常感谢您的帮助。我已经不知道该搜索哪些关键词了。

3个回答

14

我知道这是一个旧帖子,但Twig支持内联插值,例如:

{{i18n("language_#{langId}")}}

字符串内插时一定要使用双引号。


4

通过在键盘上撞头,我找到了答案。

而不是

{% if promo.~i~"_unavailable" == 1 %} 

使用

{% promo[i~"_unavailable"] == 1 %)

我想补充一点,如果promo是一个对象,它必须实现ArrayAccess接口(至少对于Twig版本1.16)。然后,Twig似乎会在使用getter之前使用接口实现来访问对象属性,正如Twig文档这里所解释的那样。 - Pascal Luxain
1
您还可以使用字符串插值功能 promo["#{i}_unavailable"],如Twig文档(版本1.16)所述。 - Pascal Luxain

-1

你可以尝试使用我的代码

{% for i in ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'] %}
    {% set key = i ~ '__unavailable' %}

    {% if (promo[key]) eq something %}
        //
    {% endif %}
{% endfor}

2
请勿在Stack Overflow上发布仅包含代码的答案。每个答案都应包括教育性的解释,旨在帮助提问者和成千上万的未来研究人员。 - mickmackusa
1
@mickmackusa,“绝对不可能”太过强烈了。许多答案仅使用代码也是可以的。 - James
请将英文翻译成中文。只返回翻译后的文本:带有解释性注释的代码也可以。 - undefined

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