如何为Twig定义全局变量

时间:2014-09-12 15:51:14

标签: php symfony twig

我正在使用一个用作表单布局的文件来覆盖某些元素( form_start form_row 等)。我注册如下:

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

有没有办法在其中使用我提供的变量以及表单

例如,当我发送到 index.html.twig

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

Var仅在 index.html.twig 中定义。

那么如何在 formlayout.html.twig中定义 var

4 个答案:

答案 0 :(得分:27)

您可以使用addGlobal()方法。

例如在BaseController中我使用:

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

所以在你的情况下你应该这样做:

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

答案 1 :(得分:4)

如果您不使用交响乐,但只使用它自己的枝条,它就像:

<?php

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

答案 2 :(得分:3)

要在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)),
        );
    }
}

希望有所帮助

和平

答案 3 :(得分:-2)

更好的例子:

您可以传输所有 $_GET、$_POST 和 $_SESSION 以便:

$twig->addGlobal('session', $_SESSION);
$twig->addGlobal('get', $_GET);
$twig->addGlobal('post', $_POST);