2012-02-13 8 views
8

Как можно получить глобальную переменную twig для сохранения изменений после ее изменения? Мой желаемый результат «установлен более глубже», хотя я получаю «исходную настройку».Symfony 2 + Twig глобальные переменные

приложение/Config/config.yml

twig: 
    globals: 
     testvar: "original setting" 

root.html.twig

{% include "MyBundle::levelone.html.twig" %} 
{{ testvar }} 

levelone.html.twig

{% set testvar = "set @ levelone" %} 
{% include "MyBundle::deeper.html.twig" %} 

deeper.html.twig

{% set testvar = "set @ deeper" %} 
+0

Пытались ли вы в блоках? Я хочу сказать, что все ваши '{% set testvar%}' и '{{testvar}}' с '{% block global_test%}'. – Florian

ответ

6

Интересный вопрос, и я не знаю ответа, но никакая сумма не обманывает блоки и прочее. Я просмотрел созданные файлы шаблонов php-кеша. Когда вы повторяете переменную, она выглядит так:

// {{ testvar }} 
echo twig_escape_filter($this->env, $this->getContext($context, "testvar"), "html", null, true); 

Так что в основном это сначала ищет testvar в вашем локальном контексте. Если он не найден, он выглядит в глобальном контексте.

Когда вы установите значение тестового вар вы получаете:

// {% set testvar = 'level one' }} 
$context["testvar"] = "level one"; 

Так только локальный контекст обновляется. Измененное значение исчезает при возврате включенного шаблона.

Так что по умолчанию, по крайней мере, похоже, что глобальные переменные действительно читаются.

Возможно, это будет возможно с помощью удлинителя. Я не знаю достаточно о внутренностях.

1

Вы пытались определить глобальную переменную через Twig? Вы можете сделать это в файле config.yml следующим образом:

twig: 
    globals: 
     my_global_var : myvalue 

Так {{my_global_var}} в шаблоне напечатает myvalue

Для получения более подробной информации читайте official docs.

+0

как мне поместить эти две строки: «$ twig = new Twig_Environment ($ loader); $ twig-> addGlobal ('text', new Text());" в моем проекте symfony2.1? – linuxatico

+0

Ну, я еще не использую Symfony2.1, так как это бета-версия. Однако я могу сказать, что с помощью Symfony2.016 вы можете определить глобальную переменную в файле config.yml, как указано [здесь] (http://symfony.com/doc/current/cookbook/templating/global_variables.html). – JeanValjean

+1

факт заключается в том, что таким образом переменная является readonly, я имею в виду, что в шаблоне вы можете изменить ее значение, но когда вы обращаетесь к ней из другого шаблона, вы обнаружите, что его значение теперь по умолчанию установлено в конфигурации ,yml – linuxatico

8

Из контейнера осознает объект:

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4); 
0

Это возможно путем определения Twig Расширение с помощью Услуги, проверить here

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