在自定义twig_variable.yml中注入全局树枝变量

时间:2017-02-14 10:50:50

标签: symfony twig

我想注入要在twig文件中使用的全局变量。

我知道我可以将它们添加到config.yml

twig:
   variable_1: variable 1
   variable_2: variable 2

但是使用当前设置我无法更新config.yml。

我已经通过load()在DependencyInjection内部的扩展类中注入了yml文件,但这是我得到的,因为我不知道如何为Twig使用注入它。

1 个答案:

答案 0 :(得分:5)

您可以尝试在compilerPass中复制TwigExtensionLoader的逻辑作为定义的here,例如:

public function process(ContainerBuilder $container)
{
    $def = $container->getDefinition('twig');
    $def->addMethodCall('addGlobal', array('my-key', 'my-value'));
}

更多详细示例:

假设我们有一个加载的属性如下:

twig_params.yml

parameters:
    foo: bar

已经由DependencyInjection加载,我们可以添加compiler pass,例如:

CustomPass

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class CustomPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $foo = $container->getParameter('foo');

        $def = $container->getDefinition('twig');
        $def->addMethodCall('addGlobal', array('foo', $foo));
    }
}

See the docs here about如何注册。

然后你可以在树枝模板中使用通常的全局变量:

{{ foo }}

希望这个帮助