如何使用缓存来自定义Twig扩展

时间:2017-01-16 16:40:46

标签: php symfony caching twig-extension

我正在使用Symfony 1.31处理Twig 2.8项目,我想通过创建扩展程序向Twig添加自定义标记:

class AppExtension extends \Twig_Extension {
   ...
   public function getTokenParsers() {
       return array(new CustomTagTokenParser());
   }
}

class CustomTagTokenParser extends \Twig_TokenParser {
    ...

    public function parse(Twig_Token $token) { 
        return new CustomTagNode(...); 
    }

    public function getTag() {
        return `customtag`:
    }
}

class CustomTagNode extends \Twig_Node {
    ...
}

现在我可以在我的模板中使用customtag

{# some Twig template #}
{% customtag %}
    ...some content...
{% endcustomtag %}

这一切都很好,我可以在扩展名中更改some content。但是,这在渲染模板/加载页面时完成。

由于some content(以及扩展程序创建的更新结果)是静态的,因此可以轻松缓存。

如何在构建缓存时更新扩展/标记只运行一次,而不是每次加载页面

1 个答案:

答案 0 :(得分:1)

根据symfony doc

  

Twig很快,因为每个模板都编译为本机PHP类并进行缓存。但不要担心:这种情况会自动发生,并且不需要您做任何事情   在您开发过程中,Twig非常聪明,可以在您进行任何更改后重新编译模板。这意味着Twig生产速度快,但在开发过程中易于使用。

简而言之,Twig会根据kernel.debugkernel.environment参数的值自动缓存每个模板并自动续订缓存。

如果您需要有关twig缓存内部行为的更多信息,您应该查看文档的这一部分:http://twig.sensiolabs.org/doc/1.x/api.html#compilation-cache

如果您需要更高级的策略,我建议您查看https://github.com/asm89/twig-cache-extension,它提供了通过许多不同策略仅缓存枝条模板的给定部分的功能。