如何告诉Symfony2不要在模板中设置全局变量(如app
)?如果我在控制器中覆盖它,我想设置自己的app
变量,但它有Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables Object
类型事件。
答案 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
服务,它将取代原来的服务。