Можно ли установить глобальные переменные в файле ветки, чтобы я мог получить доступ к этим переменным из других файлов, макросов и блоков.
Например, я хочу иметь variables.twig
файл и в нем установить мои переменные, а затем я могу включить его в другие шаблоны.
Я знаю, что установка глобальных переменных возможна из фреймворка (например, Symfony), но мне нужно решение, использующее только функции веток.
Если вы используете Symfony2, вы можете установить глобальные переменные в своем config.yml
файл:
# app/config/config.yml
twig:
# ...
globals:
myStuff: %someParam%
А потом использовать {{ myStuff }}
в любом месте вашего приложения.
Если вы используете Twig в другом проекте, вы можете установить глобальные переменные непосредственно в среде:
$twig = new Twig_Environment($loader);
$twig->addGlobal('myStuff', $someVariable);
А потом использовать {{ myStuff }}
в любом месте вашего приложения.
Если у вас много глобальных переменных и вы хотите указать набор глобальных переменных только для определенной части вашего приложения, вы можете создать расширение 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, вы включаете только визуализированное представление, полученное из этого кода, а не сам код. Таким образом, по своей сути невозможно включить набор переменных так, как вы ищете.
Других решений пока нет …