Я также столкнулся с той же проблемой, пытаясь найти решение для включения файлов (шаблонов усов) в необработанные шаблоны Twig, чтобы Twig не пытался их проанализировать.
Сначала мои файлы шаблонов усов назывались просто sometemplate.html и были обернуты в теги {% raw %}
. Некоторое время это работало, но затем я начал использовать PhpStorm IDE с плагином Handlebars (для синтаксиса усов). Чтобы PhpStorm распознал файлы как синтаксис усов, им нужно иметь уникальное расширение файла (.mustache
по умолчанию), поэтому я переименовал свой sometemplate.html в sometemplate.mustache, но мне действительно не понравилась идея, что мои шаблоны усов должны быть завернутый в теги Twig. В итоге я сделал то, что сказал @rdjs в его варианте 3. Это лучшее решение, imo.
Вот рабочая функция расширения Twig, которую я сделал:
function twig_include_raw(Twig_Environment $env, $template) {
return $env->getLoader()->getSource($template);
}
$twig->addFunction('include_raw', new Twig_Function_Function('twig_include_raw', array('needs_environment' => true)));
Имея это в виду, вы можете легко включать файлы как «сырые», не анализируя их при помощи Twig, выполнив:
{{ include_raw('sometemplate.mustache')|raw }}
Я даже создал макрос Twig для упрощения включения шаблонов усов в заголовки HTML:
{% macro mustache_script(id, file) -%}
<script id="{{ id }}" type="text/x-mustache-template">
{{ include_raw(file)|raw }}
</script>
{%- endmacro %}
И после импорта файла с указанным выше макросом в шаблон Twig (например, {% import "macros.twig" %}
) вы можете легко импортировать файлы шаблонов усов в шаблоны Twig, просто набрав {{ mustache_script('sometemplate_tpl', 'sometemplate.mustache') }}
в разделе HTML <head>
.
Надеюсь, это поможет кому-то, кто ищет решение той же проблемы.