Иногда в HTML мне нужно избегать добавления лишних пробелов, но мне также нужно добавить блоки «@if ()». Для этого я применил такой подход:
some text{--
--}@if ($someCondition){--
--}more text with no space between
@endif
И этот подход отлично себя зарекомендовал. Однако после обновления моей среды разработки и живой среды до Laravel 5.5 (с Laravel 5.2) среда разработки работает нормально, но живая среда отображает вышеуказанный блейд в следующем HTML:
some text@if ($someCondition)more text with no space between
<?php endif; ?>
... Таким образом, оператор "if" сразу после комментария лезвия остается как простой текст.
Я знаю, что это возможно, потому что обе мои среды разработки правильно отображают страницу. Я просмотрел версии PHP и скопировал весь каталог кода, но я не могу найти между ними никакой разницы, не говоря уже о разнице, которая заставила бы это обрабатываться по-другому.
Есть ли причина, по которой движок лезвия Laravel не допускает "@" сразу после комментария лезвия?
Используется PHP 7.029, Laravel 5.5, CentOS.






Способом альтернатива решить исходную проблему будет напрямую напишите некоторый PHP-код для ваших операторов if:
some text<?php
if ($someCondition):
?>more text with no space between<?php
endif;
?>
(однако я согласен, что это не самый лучший способ написания шаблонов, так как у вас будет смесь Blade и PHP)
Laravel конвертирует ваши шаблоны лезвий в PHP, а затем использует эти преобразованные файлы для рендеринга. Так что, если вы напишете какой-нибудь PHP-код напрямую с вашими шаблонами Blade, он будет работать точно так же.
Всегда можно использовать встроенные php-вложения Blade ...
some text{{ if (condition) {do something} }}more text
Это дает гибкость встроенного php в ваш HTML.
Я обнаружил проблему. Представление было кэшировано в средах разработки, поэтому оно работало.
Похоже, что в Laravel появилась новая ошибка где-то между 5.3 и 5.5. Комментарии к лезвиям удаляются до того, как будет проанализирована остальная часть лезвия, что может вызвать проблемы, как я показал в вопросе здесь. Это работало ранее в Laravel 5.2.
Я нашел работу:
some text{{null
}}@if ($someCondition){--
--}more text with no space between
@endif
Производит то, что работает:
some text<?php echo e(null); ?><?php if ($someCondition): ?>more text with no space between
<?php endif; ?>