Как определить глобальную переменную для Twig

Я использую файл, который служит в качестве макета формы для перезаписывания определенных элементов ( form_start , form_row и т. Д.). Я регистрирую его так:

twig: - AcmeMainBundle:Form:formlayout.html.twig 

Есть ли способ использовать в нем мои переменные, представленные вместе с формой ?

Например, когда я отправляю index.html.twig

 array ('form' => $formView, 'var' => $var); 

Вар определяется только в index.html.twig .

Итак, как сделать var, определенный в formlayout.html.twig

Вы можете использовать addGlobal() .

Например, в BaseController я использую:

 $this->get('twig')->addGlobal('is_test', $isTest); 

поэтому в вашем случае вы, вероятно, должны:

 $this->get('twig')->addGlobal('var', $var); 

Чтобы установить глобальную переменную в Twig, я создал сервисный вызов «@get_available_languages» (вернуть массив), а затем в моем классе событий kernel.request я выполнил следующее:

  class LocaleListener implements EventSubscriberInterface { private $defaultLocale; public function __construct($defaultLocale = 'en', ContainerInterface $container) { $this->defaultLocale = $defaultLocale; $this->container = $container; } public function onKernelRequest(GetResponseEvent $event) { //Add twig global variables $this->addTwigGlobals(); } public function addTwigGlobals(){ //Add avaialble language to twig template as a global variable $this->container->get('twig')->addGlobal('available_languages', $this->container->get('get_available_languages')); } public static function getSubscribedEvents() { return array( // must be registered before the default Locale listener KernelEvents::REQUEST => array(array('onKernelRequest', 17)), ); } } 

надеюсь, это поможет

мир

В случае, если вы не используете симфонию, но используете ветку на своем, она проста:

 <?php $loader = new \Twig_Loader_Filesystem('path/to/templates'); $twig = new \Twig_Environment($loader); $twig->addGlobal('key1', 'var1'); $twig->addGlobal('key2', 'var2');