有時(shí)您想要一個(gè)對(duì)您所用的所有模板都可用的變量。這在您的 app/config/config.yml 文件夾里是可行的。
YAML:
# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x
XML:
<!-- app/config/config.xml -->
<twig:config>
<!-- ... -->
<twig:global key="ga_tracking">UA-xxxxx-x</twig:global>
</twig:config>
PHP:
// app/config/config.php
$container->loadFromExtension('twig', array(
// ...
'globals' => array(
'ga_tracking' => 'UA-xxxxx-x',
),
));
現(xiàn)在,變量 ga_tracking 在所有的 Twig 模板里都是可用的了。
<p>The google tracking code is: {{ ga_tracking }}</p>
就是這么簡(jiǎn)單!
您還可以利用內(nèi)置的服務(wù)參數(shù)系統(tǒng),它可以讓您隔離或重用該值:
# app/config/parameters.yml
parameters:
ga_tracking: UA-xxxxx-x
YAML:
# app/config/config.yml
twig:
globals:
ga_tracking: "%ga_tracking%"
XML:
<!-- app/config/config.xml -->
<twig:config>
<twig:global key="ga_tracking">%ga_tracking%</twig:global>
</twig:config>
PHP:
// app/config/config.php
$container->loadFromExtension('twig', array(
'globals' => array(
'ga_tracking' => '%ga_tracking%',
),
));
同一個(gè)變量還是像以前那樣能用。
除了使用靜態(tài)值,您還可以將該值設(shè)置為服務(wù)。當(dāng)在模板中訪問(wèn)全局變量時(shí),將從服務(wù)容器中請(qǐng)求服務(wù),并訪問(wèn)該對(duì)象。
服務(wù)不會(huì)延遲加載。換句話說(shuō),當(dāng) Twig 被加載時(shí),即使您從來(lái)沒有使用全局變量,您的服務(wù)也會(huì)被實(shí)例化。
要將服務(wù)定義為全局 Twig 變量,以 @ 為前綴的字符串。這應(yīng)該是熟悉的,因?yàn)樗窃诜?wù)配置中使用相同語(yǔ)法。
YAML:
# app/config/config.yml
twig:
# ...
globals:
user_management: "@acme_user.user_management"
XML:
<!-- app/config/config.xml -->
<twig:config>
<!-- ... -->
<twig:global key="user_management">@acme_user.user_management</twig:global>
</twig:config>
PHP:
// app/config/config.php
$container->loadFromExtension('twig', array(
// ...
'globals' => array(
'user_management' => '@acme_user.user_management',
),
))
如果全局變量要設(shè)置更為復(fù)雜的話 - 比如說(shuō)一個(gè)對(duì)象 - 那么您就不能用上面的方法了。替代上面的方法,您需要?jiǎng)?chuàng)建一個(gè) Twig 擴(kuò)充并且在 getglobals 方法返回一個(gè)全局變量條目。