如何防止Symfony 2在模板中设置全局变量?

时间:2013-02-05 12:20:39

标签: php symfony

如何告诉Symfony2不要在模板中设置全局变量(如app)?如果我在控制器中覆盖它,我想设置自己的app变量,但它有Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables Object类型事件。

1 个答案:

答案 0 :(得分:1)

我认为这是可能的(基本上从来没有这样做导致app var可以派上用场;))

app global在Symfony\Bundle\TwigBundle\TwigEngine(用于twig)的构造函数中添加,在Symfony\Bundle\FrameworkBundle\Templating\PhpEngine的构造函数中添加(用于php)

但是当你没有将GlobalVariables传递给构造函数(可以为null)时,它不会设置app变量。因此,您可以像这样覆盖templating服务:

    <service id="templating" class="Acme\DemoBundle\Templating\TwigEngine">
        <argument type="service" id="twig" />
        <argument type="service" id="templating.name_parser" />
        <argument type="service" id="templating.locator" /> 
    </service>

和php文件:

<?php 

namespace Acme\DemoBundle\Templating;

use Symfony\Bundle\TwigBundle\TwigEngine as BaseEngine;
use Symfony\Component\Templating\TemplateNameParserInterface;
use Symfony\Component\Config\FileLocatorInterface;

class TwigEngine extends BaseEngine
{
    public function __construct(\Twig_Environment $environment, TemplateNameParserInterface $parser, FileLocatorInterface $locator)
    { 
        parent::__construct($environment, $parser, $locator);
    } 
}

你应该知道你可以在没有它的情况下实现自己的全局变量......只需定义自己的templating.globals服务,它将取代原来的服务。