我在Symfony 2的一个项目上工作,我有几个小的html片段需要包含在我的一个主视图中。根据Twig的官方文档,我应该能够简单地使用{% include 'filename.html' %}
,但在Symfony中,除非文件名以“.html. tig”结尾。它抛出错误,说它找不到文件。我想避免使用这些文件的Twig模板,因为它们没有动态内容和大量的双括号(它们是JavaScript模板),要求模板设计者必须将这些文件中的每一个都 Package 在{% raw %}
标记中,这似乎是一种非常笨拙的方法。
4条答案
按热度按时间7gs2gvoe1#
我也遇到了同样的问题,试图找到一个解决方案,包括文件(胡子模板)作为原始的Twig模板,使Twig不试图解析他们。
一开始,我的mustache模板文件只是简单地命名为sometemplate.html,并 Package 在
{% raw %}
标签中,这样工作了一段时间,但后来我开始使用PhpStorm IDE和Handlebars插件(mustache语法)。为了让PhpStorm将文件识别为mustache语法,它们需要有一个唯一的文件扩展名(默认为.mustache
),所以我将我的sometemplate.html重命名为sometemplate.mustache,但我真的不喜欢我的mustache模板需要用Twig标签 Package 的想法。rdjs在他的选项3中说,这是最好的解决方案。下面是我做的Twig扩展函数:
有了这一点,你可以很容易地包括文件作为“原始”,而不需要Twig解析它们,方法是:
我甚至做了一个Twig宏来简化包括mustache模板到HTML头部部分:
将上述宏导入到Twig模板(例如
{% import "macros.twig" %}
)后,您可以轻松地在Twig模板中导入mustache模板文件,只需在HTML<head>
部分中执行{{ mustache_script('sometemplate_tpl', 'sometemplate.mustache') }}
即可。我希望这能帮助那些正在寻找解决同样问题的方法的人。
ccgok5k52#
快速回顾一下twig文件扩展名(摘自文档):
每个模板名称还有两个扩展名,用于指定该模板的格式和引擎。
默认情况下,任何Symfony 2模板都可以用Twig或PHP编写,扩展名的最后一部分(例如.twig或.php)指定应该使用这两个引擎中的哪一个。扩展名的第一部分(例如.html、.css等)是模板将生成的最终格式。
因此,对我来说,包含一个文件作为.html至少是不明确的,即使它没有抛出错误。
所以你有三个选择:
1.如果这些文件是纯JavaScript的,那么就把它们作为脚本标签包含在你的页面中。
1.如果它们是HTML和JS的混合,那么用{% raw %}转义JS,并将文件包含为foo.html.twig模板。如果有很多这样的脚本,那么你的设计师很可能会做一些重构,并将大部分脚本移动到外部文件中(参见选项1)。
1.如果你真的坚持,你可以写一个Twig扩展来包含原始的HTML文件。(编辑:关于这个选项的更多细节,请参阅下面@Haprog的回答)。
关于我们_联系我们
1.UPDATE 2015wig已经添加了源函数:
{{ source('AcmeSomeBundle:Default:somefile.html.twig') }}
感谢@奈杰尔安吉尔在下面的评论中对选项4的支持。
brjng4g33#
我来到这篇文章,因为我有一个类似的问题.经过一个小时左右的搜索和尝试,我发现,从Twig Version 1.15 the "source Function" was added .
也许这对将来的人有帮助。
pcww981p4#
跟进卡莉,如果你在延期...你可以这样申请。
这是一个$this->twig_include_raw类型的方法。你可以在你的模板中包含:
不需要“|raw”。