2014-10-01 30 views
7

如果你這樣做你會得到一個錯誤:Laravel Blade沒有額外的空格?

<p>@if($foo)@if($bar)[email protected]@endif</p> 

如果你這樣做,你會得到<p> test </p>,加入過多whitepace:

<p>@if($foo) @if($bar)[email protected] @endif</p> 

是否有辦法避免這種情況?

編輯:請參閱下面的答案以獲取最新的回覆。有一個乾淨的方法可以做到這一點,沒有黑客或外部庫。

回答

3

這似乎是獲得了大量的搜索流量,所以我想我會添加更新來分享我最近處理這些事情的方式。基本上,它是多一點的代碼,但它最終被愚蠢的簡單,非常乾淨:

@if($foo) 
    <p>Test</p> 
@elseif($bar) 
    <p>Test2</p> 
@else 
    <p>Test3</p> 
@endif 

當你與刀片工作故事的寓意是,不要試圖塞進了很多條件句內元素。而是讓條件的結果包含元素。它很乾淨,易於閱讀,並且只花了幾個字符。

+0

我的麪包屑有這個問題,我用「」把它們包裹起來。基本上相同的解決方案。謝謝您的回答! – 2017-06-27 09:01:17

+1

雖然它使我們很難訴諸這種方法(因爲似乎沒有其他選擇),但它是令人驚訝的有效的。謝謝! – 2017-11-03 16:36:49

21

嘗試用三元運算符,存在Laravel

<p>{{ $foo ? ($bar ? 'test' : '') : ''}}</p> 
+2

Upvoted爲具體示例的備用解決方案。 – Citizen 2014-10-01 18:51:28

3

沒有空白對照據我所知,在刀片沒有spaceless標籤。如果你想使用標準的刀片標籤,你將有額外的空間。有一個github discussion與新標籤的建議

7

您可以隨時在packagist上使用hedronium/spaceless-blade包將此功能添加到刀片。

+0

aint for'foreach loop',仍然獲得空格 – 2017-02-18 18:18:09

+0

引用的包旨在消除* already-parsed Blade指令*之間的內容空間,而不是*相鄰*指令之間的空格,只有空白符之間有空格。 Macin's Answer中的鏈接澄清了區別。這就是Symfony的Twig引擎包含'{%spaceless%}'和'{%endspaceless%}'的原因,儘管它的標籤語法使用了開放*和*結束分隔符('{%'和'%}'' )。換句話說,建議的解決方案解決了一個不同的問題。 – 2017-11-03 16:47:20