Symfony 2 + глобальные переменные Twig

Как можно получить глобальную переменную twig для поддержки модификации после ее изменения с помощью include? Мой желаемый результат - «установить @ глубже», хотя я получаю «исходную настройку».

приложение / 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" %}

person ojreadmore    schedule 13.02.2012    source источник
comment
Вы пробовали внутри блоков? Я имею в виду, оберните все свои {% set testvar %} и {{ testvar }} в {%block global_test %}.   -  person Florian Klein    schedule 14.02.2012


Ответы (4)


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

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

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

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

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

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

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

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

person Cerad    schedule 14.02.2012

Из объекта, поддерживающего контейнер:

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);
person Thomas Decaux    schedule 25.10.2012

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

twig:
    globals:
        my_global_var : myvalue

Итак, {{my_global_var}} в вашем шаблоне будет печатать myvalue

Для получения дополнительной информации прочтите официальную документацию.

person JeanValjean    schedule 26.04.2012
comment
как мне поместить эти 2 строки: $ twig = new Twig_Environment ($ loader); $ twig- ›addGlobal ('текст', новый текст ()); в моем проекте symfony2.1? - person linuxatico; 30.07.2012
comment
Ну, я пока не использую Symfony2.1, так как это бета-версия. Однако я могу сказать, что с помощью Symfony2.016 вы можете определить глобальную переменную в файле config.yml, как указано здесь. - person JeanValjean; 03.08.2012
comment
Дело в том, что таким образом переменная доступна только для чтения, я имею в виду, что в шаблоне вы можете изменить ее значение, но когда вы получите доступ к ней из другого шаблона, вы обнаружите, что ее значение теперь является значением по умолчанию, установленным в конфигурации. yml - person linuxatico; 06.08.2012
comment
Если вы хотите изменить значение только для текущего пользователя, вы можете прочитать его один раз и сохранить в переменной сеанса. Если вам нужно изменить значение для всех пользователей, используйте базу данных. - person JeanValjean; 06.08.2012

Это возможно, указав расширение Twig через службы, проверьте здесь

person sepehr    schedule 07.02.2013