2014-10-01 24 views
7

Se si esegue questa operazione si ottiene un errore:Laravel Blade senza spazi bianchi extra?

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

E se fate questo, si ottiene <p> test </p>, aggiungere troppo whitepace:

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

C'è un modo per evitare questo?

Modifica: vedere la risposta seguente per una risposta aggiornata. C'è un modo pulito per farlo senza hacks o librerie esterne.

risposta

3

questo sembra ricevere molto traffico di ricerca, quindi ho pensato di aggiungere un aggiornamento per condividere come sto gestendo questo in questi giorni. Fondamentalmente, è un po 'più codice, ma finisce per essere stupido semplice e molto pulita:

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

La morale della storia è quando si lavora con lama, non cercare di stipare un sacco di condizionali all'interno elementi. Piuttosto, il risultato del condizionale contiene l'elemento. È pulito, facile da leggere e con pochi altri personaggi spesi.

+0

Ho avuto questo problema con le mie briciole di pane, le ho confezionate in un ''. Fondamentalmente la stessa soluzione. La ringrazio per la risposta! –

+1

Mentre mi addolora ricorrere a questo approccio (poiché non sembra esserci alternativa), è sorprendentemente efficace. Grazie! –

21

Prova con un operatore ternario, non v'è alcun controllo spazi bianchi in laravel

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

In aumento per soluzione alternativa per l'esempio specifico. – Citizen

3

Per quanto ne so non c'è spaceless tag in Blade. Se vuoi usare tag standard di Blade avrai spazi extra. C'è un github discussion con proposta per il nuovo tag

7

Si può sempre usare il pacchetto hedronium/spaceless-blade su packagist per aggiungere questa funzionalità a Blade.

+0

non sta lavorando per 'foreach loop', ottenendo ancora gli spazi –

+0

Il pacchetto di riferimento è progettato per eliminare gli spazi nel contenuto tra * direttive Blade già analizzate *, non tra * direttive adiacenti * con solo spazi bianchi tra loro. Il collegamento nella risposta di Macin chiarisce la distinzione. Questo è il motivo per cui il motore di Twig di Symfony include '{% spaceless%}' e '{% endspaceless%}', nonostante il fatto che la sua sintassi di tag impieghi i delimitatori di chiusura * e * di apertura ('{%' e '%}'). In altre parole, la soluzione suggerita risolve un problema diverso. –