如何注入变量到所有的模板(全局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',
     ),
)); |