2015-03-10 2 views
5

Можно ли установить глобальные переменные в файле twig, чтобы я мог получить доступ к этим переменным из других файлов, макросов и блоков.Как определить глобальные переменные внутри файла шаблона twig?

Например, я хочу иметь файл variables.twig и в нем установить мои переменные, а затем включить его в другие шаблоны.

Я знаю, что установка глобальных переменных возможна из фреймворка (например, Symfony), но я хочу решение, использующее только функции twig.

+0

Возможный дубликат [Symfony 2 + Twig global variables] (http://stackoverflow.com/questions/9263903/symfony-2-twig-global-variables) – pbenard

ответ

15

Использование конфигурации Symfony2

Если вы используете Symfony2, вы можете установить глобалам в файле config.yml:

# app/config/config.yml 
twig: 
    # ... 
    globals: 
     myStuff: %someParam% 

И затем использовать {{ myStuff }} в любом месте вашего приложения.


Использование Twig_Environment :: addGlobal

Если вы используете Twig в другом проекте, вы можете установить глобалам непосредственно в среде:

$twig = new Twig_Environment($loader); 
$twig->addGlobal('myStuff', $someVariable); 

, а затем использовать {{ myStuff }} в любом месте вашего приложения ,


Используя расширение Twig

Если у вас есть много глобальных переменных и требуется указать набор глобалов для определенной части вашего приложения только, вы можете создать расширение Twig:

class Some_Twig_Extension extends Twig_Extension implements Twig_Extension_GlobalsInterface 
{ 
    public function getGlobals() 
    { 
     return array(
      'someStuff' => $this->myVar, 
      // ... 
     ); 
    } 

    // ... 
} 

Затем импортировать его в среде только при необходимости:

$twig = new Twig_Environment($loader); 
$twig->addExtension(new Project_Twig_Extension()); 

И все равно используйте {{ myStuff }} в любом месте приложения.

Использования шаблона Twig

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

+0

Очень хороший, тщательный ответ, спасибо за предоставление альтернатив только для решения config.yml! @ alain-tiemblo –

+0

Просто примечание: метод getGlobals() устарел. –

+0

Второй метод решил мою проблему! Благодаря ! : D –

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