如何在 Symfony2/Twig 模板中包含原始 HTML 文件?

2023-11-26

我正在 Symfony2 中开发一个项目,我有几小段 html 需要包含在我的主要视图之一中。根据 Twig 官方文档,我应该能够简单地使用{% include 'filename.html' %}但在 Symfony 中,除非文件名以“.html.twig”结尾,否则它会抛出错误,指出找不到该文件。我想避免对这些文件使用 Twig 模板,因为它们没有动态内容和大量双括号(它们是 javascript 模板),并且要求模板设计者必须将这些文件中的每一个包装在{% raw %}标签似乎是一种非常笨拙的方法。


我也遇到了同样的问题,试图找到一种解决方案,将文件(胡子模板)作为原始文件包含在 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>部分。

我希望这对正在寻找同一问题解决方案的人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Symfony2/Twig 模板中包含原始 HTML 文件? 的相关文章

随机推荐