我正在使用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
(以及扩展程序创建的更新结果)是静态的,因此可以轻松缓存。
如何在构建缓存时更新扩展/标记只运行一次,而不是每次加载页面
答案 0 :(得分:1)
根据symfony doc:
Twig很快,因为每个模板都编译为本机PHP类并进行缓存。但不要担心:这种情况会自动发生,并且不需要您做任何事情 在您开发过程中,Twig非常聪明,可以在您进行任何更改后重新编译模板。这意味着Twig生产速度快,但在开发过程中易于使用。
简而言之,Twig会根据kernel.debug
和kernel.environment
参数的值自动缓存每个模板并自动续订缓存。
如果您需要有关twig缓存内部行为的更多信息,您应该查看文档的这一部分:http://twig.sensiolabs.org/doc/1.x/api.html#compilation-cache
如果您需要更高级的策略,我建议您查看https://github.com/asm89/twig-cache-extension,它提供了通过许多不同策略仅缓存枝条模板的给定部分的功能。