在Symfony中注册Twig扩展

7

我希望使用nochso/html-compress-twig扩展来压缩所有html、内联css和js。但这是我第一次在Twig上注册新的扩展,我有些困惑应该在我的项目中的哪里添加以下行:

$twig = new Twig_Environment($loader);
$twig->addExtension(new \nochso\HtmlCompressTwig\Extension());

我在阅读Twig的文档,但并没有给我带来太多帮助,他们只是提供了相同的示例,并添加了以下内容:

Twig does not care where you save your extension on the filesystem, as all extensions must be registered explicitly to be available in your templates.

You can register an extension by using the addExtension() method on your main Environment object:

我只想在全局启用这个扩展,并且能够在任何twig模板中使用{% htmlcompress %}{% endhtmlcompress %}


2
你最好在这里遵循Symfony的具体文档:http://symfony.com/doc/current/templating/twig_extension.html - Frank B
1
不要忘记选择你正在使用的正确Symfony版本。 - Frank B
2个回答

15

你可以按照以下方式将你的Twig扩展程序注册为标记服务:

services:
    htmlcompress:
        class: '\nochso\HtmlCompressTwig\Extension'
        tags:
            - { name: twig.extension }

谢谢您的回复!它没有任何问题,再次感谢! - Kevin Gravell

0

谢谢您的回复!在安装完bundle之后,我应该如何在services.yml中启用它?我尝试了这个:app.compress: class: \nochso\HtmlCompressTwig\Extension tags: [twig.extension]但我猜我应该将"twig.extension"更改为另一个名称... - Kevin Gravell
1
不,你不应该将'twig.extension'更改为其他名称。那不是一个名称。这是一个标志,告诉Symfony您的服务是Twig扩展。您是否尝试根据文档将'true'作为参数传递?压缩由Twig的调试设置禁用。这是为了使开发更容易,但您始终可以覆盖它。此扩展的构造函数接受一个布尔参数$forceCompression。当为true时,这将强制进行压缩,而不考虑Twig的调试设置。如果省略,则默认为false。 - Frédéric Clausset
1
我尝试了两种选择,去掉 "twig.extension" 会引发异常,告诉我 “app.compress”服务的“tags”条目必须是数组。我也试着传递 true 作为参数,但需要先以正确的方式进行配置。 - Kevin Gravell
请在您的答案中添加更多的解释,而不是链接到外部资源。 - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接