Symfony 2 + Twig глобальные переменные - PullRequest
8 голосов
/ 13 февраля 2012

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

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

Ответы [ 4 ]

8 голосов
/ 25 октября 2012

Из объекта, осведомленного о контейнере:

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);
6 голосов
/ 14 февраля 2012

Интересный вопрос, и я не знаю ответа, но никакое количество не дурачится с блоками и прочим, не сработает. Я посмотрел в сгенерированных файлах шаблонов 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 голос
/ 26 апреля 2012

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

twig:
    globals:
        my_global_var : myvalue

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

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

0 голосов
/ 07 февраля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...