2014-10-01 25 views
7

Wenn Sie dies tun erhalten Sie eine Fehlermeldung:Laravel Blade ohne extra Leerzeichen?

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

Und wenn Sie dies tun, Sie <p> test </p>, bekommen zu viel whitepace fügte hinzu:

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

Gibt es eine Möglichkeit, dies zu vermeiden?

Edit: siehe meine Antwort unten für eine aktualisierte Antwort. Es gibt einen sauberen Weg, dies ohne Hacks oder externe Bibliotheken zu tun.

Antwort

3

Dies scheint eine Menge Suchverkehr zu bekommen, also dachte ich mir, ich würde ein Update hinzufügen, um zu teilen, wie ich das in diesen Tagen behandle. Im Grunde ist es ein wenig mehr Code, aber es endet dumm einfach und sehr sauber:

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

Die Moral der Geschichte ist, wenn Sie mit Klinge arbeiten, versuchen Sie nicht viel conditionals zu stopfen innerhalb Elemente. Stattdessen muss das Ergebnis der Bedingung das Element enthalten. Es ist sauber, leicht zu lesen und mit nur ein paar mehr Zeichen ausgegeben.

+0

Ich hatte dieses Problem mit meinen Brotkrumen, ich wickelte sie in eine ''. Grundsätzlich die gleiche Lösung. Vielen Dank für Ihre Antwort! –

+1

Während es mich schmerzt, auf diesen Ansatz zurückzugreifen (da es scheinbar keine Alternative gibt), ist es überraschend effektiv. Vielen Dank! –

21

Versuchen mit einem ternären Operator, gibt es keine Leerkontrolle in Laravel

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

Upvoted für alternative Lösung für das spezifische Beispiel. – Citizen

3

Soweit ich weiß, gibt es keinen spaceless Tag in Klingen. Wenn Sie Standard-Blade-Tags verwenden möchten, haben Sie zusätzliche Leerzeichen. Es gibt eine github discussion mit Vorschlag für neue Tag

7

Sie können immer das Paket auf Packagist verwenden, um diese Funktionalität zu Blade hinzuzufügen.

+0

aint arbeitet für 'foreach loop' und erhält immer noch die Leerzeichen –

+0

Das referenzierte Paket wurde entwickelt, um Leerzeichen im Inhalt zwischen * bereits analysierten Blade-Direktiven * zu entfernen, nicht zwischen * angrenzenden * Direktiven mit nur Leerzeichen zwischen ihnen. Der Link in Macins Antwort verdeutlicht die Unterscheidung. Aus diesem Grund enthält Symfonys Twig-Engine '{% spaceless%}' und '{% endspaceless%}', obwohl die Tag-Syntax öffnende * und * schließende Trennzeichen ('{%' und '%}' verwendet). Mit anderen Worten, die vorgeschlagene Lösung spricht ein anderes Problem an. –