Laravel Blade без лишних пробелов?

Если вы сделаете это, вы получите ошибку:

<p>@if($foo)@if($bar)test@endif@endif</p>

И если вы сделаете это, вы получите <p> test </p>, добавив слишком много пробелов:

<p>@if($foo) @if($bar)test@endif @endif</p>

Есть ли способ избежать этого?

Изменить: см. Мой ответ ниже для обновленного ответа. Есть чистый способ сделать это без хаков или внешних библиотек.

9

Решение

Попробуйте с троичным оператором, в Laravel нет управления пробелами

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

Другие решения

Вы всегда можете использовать hedronium / беспространственен-лопастной пакет на packagist, чтобы добавить эту функциональность в Blade.

7

кажется, что это получает большой поисковый трафик, поэтому я решил добавить обновление, чтобы поделиться тем, как я справляюсь с этим в эти дни. По сути, это немного больше кода, но в итоге он получается глупым и простым:

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

Мораль этой истории в том, что когда вы работаете с лезвием, не пытайтесь втиснуть много условностей в элементы. Скорее у условного результата есть элемент. Это чисто, легко читается, и только с несколькими потраченными символами.

5

Насколько я знаю, нет spaceless тег в клинке. Если вы хотите использовать стандартные метки Blade, у вас будут лишние пробелы. Eсть обсуждение GitHub с предложением нового тега

3