2
如何告訴Symfony2不要在模板中設置全局變量(如app
)?我想設置我自己的app
變量,但它有Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables Object
類型的事件,如果我覆蓋它在我的控制器。如何防止Symfony 2在模板中設置全局變量?
如何告訴Symfony2不要在模板中設置全局變量(如app
)?我想設置我自己的app
變量,但它有Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables Object
類型的事件,如果我覆蓋它在我的控制器。如何防止Symfony 2在模板中設置全局變量?
我認爲是這樣的可能性(基本上從來沒那麼引起app
變種都能得心應手;))
app
全球在Symfony\Bundle\TwigBundle\TwigEngine
(用於樹枝構造函數添加),並在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
服務,將取代原來的一個。
難道你不能只使用自己的變量爲你的應用程序對象,如'myapp'而不是'app'?通過更改框架的內置行爲,您的代碼將變得非常不便。 – leftclickben
難道你不能使用'my_app'而不是'app'嗎?我不確定這一點,但Symfony的一些內部可能依賴於這個變量。 –