是否有更简洁的方法在Twig模板中编写多行代码?

时间:2017-02-23 11:16:26

标签: twig

如果我有这样的代码块:

{% if app.user is defined %}
    {% set isOwner = user.isEqualTo(app.user) %}
{% else %}
    {% set isOwner = false %}
{% endif %}

是否可以在不包装标签中的每一行的情况下编写它,像这样?

{% if app.user is defined
    set isOwner = user.isEqualTo(app.user)
else
    set isOwner = false
endif %}

上面的代码显然不起作用,因为没有行终止符。添加;也不起作用。

如果有很多行,事情变得非常复杂。

更新

虽然DarkBee的答案是缩短语法的方法,但要小心将null传递给可能期望某个特定类的对象的方法。我们最终使用的代码的最终版本并没有比原始问题好多少,但至少它只少了一行:

{% set isOwner = false %}
{% if app.user is not null %}
    {% set isOwner = user.isEqualTo(app.user) %}
{% endif %}

这样,总是设置布尔标志,并且方法永远不会收到空对象。

此外,如果您担心爬行到HTML中的额外空间(由于缩进),避免这种情况的最佳方法是将整段代码包装在{% spaceless %}...{% endspaceless %}标签中。

2 个答案:

答案 0 :(得分:4)

更简单的方法是:

{% set isOwner = user.isEqualTo(app.user|default(null)) %}

答案 1 :(得分:3)

我认为不,您可以使用三元运算符,如:

{% set isOwner = (app.user is defined  and user.isEqualTo(app.user)) ? true : false %}

希望这个帮助

文档中的更多信息here