如何注入变量到所有的模板(全局Twig变量)
有时候,你希望变量能够进入你所使用的所有模板。在你的app/config/config.yml
文件中设置就可以做到:
|
# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x |
|
<!-- app/config/config.xml -->
<twig:config>
<!-- ... -->
<twig:global key="ga_tracking">UA-xxxxx-x</twig:global>
</twig:config> |
|
// app/config/config.php
$container->loadFromExtension('twig', array(
// ...
'globals' => array(
'ga_tracking' => 'UA-xxxxx-x',
),
)); |
现在,在所有的Twig模板中都可以使用ga_tracking
变量了:
|
<p>The google tracking code is: {{ ga_tracking }}</p> |
非常容易!
使用服务容器参数 ¶
你也可以利用内置的服务参数系统,他可以让你独立和重用这个值:
|
# app/config/parameters.yml
parameters:
ga_tracking: UA-xxxxx-x |
|
# app/config/config.yml
twig:
globals:
ga_tracking: '%ga_tracking%' |
|
<!-- app/config/config.xml -->
<twig:config>
<twig:global key="ga_tracking">%ga_tracking%</twig:global>
</twig:config> |
|
// app/config/config.php
$container->loadFromExtension('twig', array(
'globals' => array(
'ga_tracking' => '%ga_tracking%',
),
)); |
这个相同的变量使用和以前一样。
引用服务 ¶
除了使用静态值,您还可以将该值设置为服务。每当全局变量在模板中被访问,就从服务容器中请求服务,并获取该对象。
这个服务不会延迟加载。换句话说,当Twig一被加载,即使你从来都没使用过这个全局变量,您的服务也会被实例化。
要定义一个服务为全局Twig变量,字符串前缀应该为@
。这应该感到熟悉,因为你在服务容器中也使用相同的语法。
|
# app/config/config.yml
twig:
# ...
globals:
user_management: '@app.user_management' |
|
<!-- app/config/config.xml -->
<twig:config>
<!-- ... -->
<twig:global key="user_management">@app.user_management</twig:global>
</twig:config> |
|
// app/config/config.php
$container->loadFromExtension('twig', array(
// ...
'globals' => array(
'user_management' => '@app.user_management',
),
)); |