2017-01-16 2 views
1

Я работаю над проектом Symfony 2.8 с использованием Twig 1.31, и я хотел бы добавить специальный тег для 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 (а также обновленный результат, созданный расширением) является статическим, это можно легко кэшировать.

Как обновить расширение/тег для запуска только один раз при создании кеша, а не при загрузке каждой страницы?

ответ

1

Согласно symfony doc:

Twig быстро, потому что каждый шаблон компилируется в родной класс PHP и кэшируются. Но не беспокойтесь: это происходит автоматически и не требует от вас ничего делать.
И пока вы разрабатываете, Twig достаточно умен, чтобы повторно скомпилировать ваши шаблоны после внесения каких-либо изменений. Это означает, что Twig быстро развивается, но прост в использовании при разработке.

Короче говоря, Twig кэширует каждые шаблоны и обновляет кэш автоматически в зависимости от значения параметров kernel.debug и kernel.environment.

Если вам нужно больше некоторая информация о внутреннем поведении кэширования веточки, вы должны посмотреть эту часть дока: http://twig.sensiolabs.org/doc/1.x/api.html#compilation-cache

Если вам нужен более продвинутую стратегия, я предлагаю вам взглянуть на https://github.com/asm89/twig-cache-extension, который предоставляет возможность кэшировать только заданные части шаблонов ветви с помощью множества разных стратегий.

Смежные вопросы