有没有更简单的方法在Twig模板中编写多行代码?

aal*_*aap 10 twig

如果我有这样的代码块:

{% 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 %}标签中.

Dar*_*Bee 4

一个更短的方法是:

{% set isOwner = user.isEqualTo(app.user|default(null)) %}
Run Code Online (Sandbox Code Playgroud)

  • 但这不是多行代码。我们是否应该假设这是不可能的? (2认同)