Twig 有没有一种更精简的方法可以在细枝模板中编写多行代码?
如果我有这样一段代码:Twig 有没有一种更精简的方法可以在细枝模板中编写多行代码?,twig,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
{% 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%}
标记中。我想不,您可以使用三元运算符,如:
{% set isOwner = (app.user is defined and user.isEqualTo(app.user)) ? true : false %}
希望这有帮助
文档中的更多信息一个简短的方法是:
{% set isOwner = user.isEqualTo(app.user|default(null)) %}
无需放置?真:假
结尾处though@DarkBee那也很有趣@我希望你能把这个贴出来作为答案!小心你的口哨,但这不是多行代码。“我们应该假设这是不可能的吗?”费尔南多不确定你在问什么?最初的代码片段是多行的,OP想要一个更精简(更短?)的方法谢谢@DarkBee,可能我误解了这个问题。我的意思是,您的代码不是“更精简的多行代码”,而是“更精简的单行代码”。我来问这个问题是想找到一种方法,在不将每一行都放在括号内的情况下写出几行,这就是我的评论的意思,如果可能的话,或者不可能。@Fernando可能是你想要的