1

我正在Symfony使用 1.31 开发 2.8 项目Twig,我想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(以及由扩展创建的更新结果)是静态的,因此可以轻松缓存。

如何在构建缓存时而不是在每次页面加载时更新扩展程序/标签以仅运行一次?

4

1 回答 1

1

根据symfony 文档

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,它提供了通过许多不同策略仅缓存给定部分 twig 模板的能力。

于 2017-01-16T18:32:47.297 回答