2017-02-23 140 views
4

如果我有這樣的代碼塊:有沒有一種方法可以在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 isOwner = false 
endif %} 

上面的代碼顯然不起作用,因爲沒有行結束符。添加;也不起作用。

如果線條很多,事情會變得非常複雜。

更新:

雖然DarkBee的回答是縮短語法,警惕傳遞null到可以期待一個特定的類的對象方法的方式。我們最終與去代碼的最終版本比原來的問題也不遑多讓,但至少少了一個行:

{% set isOwner = false %} 
{% if app.user is not null %} 
    {% set isOwner = user.isEqualTo(app.user) %} 
{% endif %} 

這樣,布爾標誌總是設置和方法從未收到null目的。另外,如果您擔心會有額外的空間蔓延到您的HTML中(作爲縮進的結果),那麼避免這種情況的最好方法是將整段代碼包裝到{% spaceless %}...{% endspaceless %}標記中。

+0

@DarkBee這也很有趣! – aalaap

+0

@DarkBee我希望你已經發布了這個答案! – aalaap

+1

小心你想要什麼 – DarkBee

回答

3

一個較短的方式做,這就是:

{% set isOwner = user.isEqualTo(app.user|default(null)) %} 
+0

但這不是多行代碼。我們是否應該認爲這是不可能的? – Fernando

+0

@Fernando不確定你在問什麼?原始代碼片段是多行和OP想要一個精簡(更短嗎?)方法 – DarkBee

+0

謝謝@DarkBee,可能是我誤解了這個問題。我的意思是你的代碼不是「精簡的多行代碼」,而是「更精簡的單行代碼」。我來到這個問題尋找一種方式來寫幾行,而不是將它們中的每一行都包含在括號內,這就是我的意思,如果可能或不可以。 – Fernando

3

我覺得沒有,你可以使用三元運算符,如:

{% set isOwner = (app.user is defined and user.isEqualTo(app.user)) ? true : false %} 

希望這有助於

更多信息here在doc

+3

不需要放置'? true:false'儘管 – DarkBee

+1

hi @DarkBee很好的抓住! – Matteo

相關問題