Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twig 有没有一种更精简的方法可以在细枝模板中编写多行代码?_Twig - Fatal编程技术网

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可能是你想要的