如果我有这样的代码块:
{% if app.user is defined %}
{% set isOwner = user.isEqualTo(app.user) %}
{% else %}
{% set isOwner = false %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
是否可以在不包装标签中的每一行的情况下编写它,像这样?
{% if app.user is defined
set isOwner = user.isEqualTo(app.user)
else
set isOwner = false
endif %}
Run Code Online (Sandbox Code Playgroud)
上面的代码显然不起作用,因为没有行终止符.添加a ;
也不起作用.
如果有很多行,事情变得非常复杂.
更新:
虽然DarkBee的答案是缩短语法的方法,但要小心将null传递给可能期望特定类的对象的方法.我们最终使用的代码的最终版本并没有比原始问题好多少,但至少它只减少了一行:
{% set isOwner = false %}
{% if app.user is not null %}
{% set isOwner = user.isEqualTo(app.user) %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这样,总是设置布尔标志,并且方法永远不会接收空对象.
此外,如果您担心爬行到HTML中的额外空间(作为缩进的结果),避免这种情况的最佳方法是将整段代码包装在{% spaceless %}...{% endspaceless %}
标签中.
一个更短的方法是:
{% set isOwner = user.isEqualTo(app.user|default(null)) %}
Run Code Online (Sandbox Code Playgroud)