2017-01-16 50 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它提供了通過許多不同的策略來緩存特定部分的樹枝模板的能力。