我也遇到了同样的问题,试图找到一种解决方案,将文件(胡子模板)作为原始文件包含在 Twig 模板中,这样 Twig 就不会尝试解析它们。
起初,我将小胡子模板文件简单命名为 sometemplate.html 并包裹在{% raw %}
标签。这工作了一段时间,但后来我开始使用 PhpStorm IDE 和 Handlebars 插件(用于 Mustache 语法)。为了让 PhpStorm 将文件识别为 Mustache 语法,它们需要具有唯一的文件扩展名 (.mustache
默认情况下),所以我将 sometemplate.html 重命名为 sometemplate.mustache 但我真的不喜欢我的胡子模板需要用 Twig 标签包裹。所以我最终按照@rdjs在他的选项3中所说的去做。在我看来,这是最好的解决方案。
这是我制作的工作 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>
部分。
我希望这对正在寻找同一问题解决方案的人有所帮助。