2017-01-16 45 views
1

我使用Twig 1.31 Symfony 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

按照symfony doc

特威格是快的,因为每个模板被编译为本地PHP类和缓存。但不要担心:这会自动发生,不需要你做任何事情。
虽然你正在开发,Twig很聪明,可以在你做任何改变后重新编译你的模板。这意味着Twig生产速度快,但开发时易于使用。

总之,嫩枝缓存每个模板和更新缓存自动取决于kernel.debugkernel.environment参数的值。

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

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