如何使用symfony2在Twig中设置全局变量

时间:2016-07-05 12:20:00

标签: symfony

我正在使用symfony 2.8和twig 1.2,我想知道是否有办法为树枝模板设置全局变量,我不想进入每个树枝文件并更改值,如果有是一个中心的地方,我可以设置变量值,并在任何树枝文件中使用它,无论它们在哪个目录都很棒。

截至目前我在paramaters.yml文件中定义了键值

parameters:
    client_name: 'naruto uzumaki'

然后在控制器里面我有

<?php
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{
    public function editAction()
    {
        $var = $this->container->getParameter('client_name');
        return $this->render("UserBundle:edit:edit.html.twig", array('var' => $var));
    }
}

然后在树枝内显示它,

<h1>Hello, {{ var }}</h1>

我想避免在控制器中调用服务容器并直接访问twig文件中的client_name值,任何帮助都将不胜感激

-dheeraj

3 个答案:

答案 0 :(得分:4)

是的,您可以在配置文件中

# app/config/config.yml
twig:
    globals:
        my_global_variable: '%client_name%'

然后在Twig:

{{ my_global_variable }}

不要害怕在谷歌搜索解决方案,这是“全球变量”的第一个结果&#39;是:

http://symfony.com/doc/current/cookbook/templating/global_variables.html

答案 1 :(得分:3)

在config.yml中尝试:

mvn deploy

在你的树枝上,你可以轻松访问它:

twig:
    # ...
    globals:
        global_var: %client_name%'

您也可以尝试引用服务。请参阅文档http://symfony.com/doc/2.8/cookbook/templating/global_variables.html#referencing-services

答案 2 :(得分:0)

为单独使用Twig(即项目的其余部分不是基于Symfony构建)的情况添加答案。

扩展样本

class CustomTwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{
    private $globals;

    public function __construct(array $globals) {
        $this->globals = $globals;
    }

    public function getGlobals() {
        return $this->globals;
    }
}

配置树枝:

// where twig is created
$loader = new Twig_Loader_Filesystem('/path/to/templates'); // or whatever loader you would use
$globals = ['global_var' => 'whatever'];
$globalsExtension = new CustomTwigExtension($globals);
$twig = new Twig_Environment($loader);
$twig->addExtension($globalsExtension);

在模板中:

<div>{{ global_var }}</div>

Twig docs on the topic的引用