如果我有这样的代码块:
{% 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 %}
标签中。
答案 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