Контролируемое использование Twig тега spaceless
В ряде сценариев, например, при разработке и отладке шаблонов оформления, постоянное использование Twig тега spaceless
является нежелательным. Для того, чтобы не вносить постоянные изменения в код шаблонов, добавляя и удаляя пары тегов spaceless
, следует предусмотреть возможность контролируемого управления их использованием на основании задаваемого условия.
На первый взгляд кажется совершенно логичным управлять использованием Twig тега spaceless
с помощью следующей конструкции, где значение переменной use_spaceless
включает или отключает минификацию генерируемого блока HTML кода.
{% set use_spaceless = true %}
{% if use_spaceless %}{% spaceless %}{% endif %}
{# Здесь ваш код, генерирующий HTML вывод #}
{% if use_spaceless %}{% endspaceless %}{% endif %}
Однако выполнение этого кода приведёт к возникновению ошибки: Twig_Error_Syntax: Unexpected “endif” tag (expecting closing tag for the “spaceless” tag defined near line 1).
Такая ситуация возникает в случаях, когда пары Twig тегов разделены между собой условными выражениями. Необходимо помнить об этом ограничении и всегда учитывать его на этапе проектирования логики модулей шаблона оформления!
В случае с тегом spaceless
, описанное ограничение можно обойти, прибегнув к предварительной буферизации вывода. Используя тег set в шаблоне Twig это может быть сделано следующим образом.
{% set use_spaceless = true %}
{% set output %}
{# Здесь ваш код, генерирующий HTML вывод #}
{% endset %}
{% if use_spaceless %}
{% spaceless %}{{ output }}{% endspaceless %}
{% else %}
{{ output }}
{% endif %}
Используя в качестве примера этот фрагмент кода, собственная реализация контролируемого управления минификацией вывода с помощью Twig тега spaceless
, не должна вызывать проблем.