Если вы сделаете это, вы получите ошибку:
<p>@if($foo)@if($bar)test@endif@endif</p>
И если вы сделаете это, вы получите <p> test </p>
, добавив слишком много пробелов:
<p>@if($foo) @if($bar)test@endif @endif</p>
Есть ли способ избежать этого?
Изменить: см. Мой ответ ниже для обновленного ответа. Есть чистый способ сделать это без хаков или внешних библиотек.
Попробуйте с троичным оператором, в Laravel нет управления пробелами
<p>{{ $foo ? ($bar ? 'test' : '') : ''}}</p>
Вы всегда можете использовать hedronium / беспространственен-лопастной пакет на packagist, чтобы добавить эту функциональность в Blade.
кажется, что это получает большой поисковый трафик, поэтому я решил добавить обновление, чтобы поделиться тем, как я справляюсь с этим в эти дни. По сути, это немного больше кода, но в итоге он получается глупым и простым:
@if($foo)
<p>Test</p>
@elseif($bar)
<p>Test2</p>
@else
<p>Test3</p>
@endif
Мораль этой истории в том, что когда вы работаете с лезвием, не пытайтесь втиснуть много условностей в элементы. Скорее у условного результата есть элемент. Это чисто, легко читается, и только с несколькими потраченными символами.
Насколько я знаю, нет spaceless
тег в клинке. Если вы хотите использовать стандартные метки Blade, у вас будут лишние пробелы. Eсть обсуждение GitHub с предложением нового тега