symfony 2.2.11 中全局变量需通过 config.yml 的 twig.globals 配置(如 site_name、app_version)或自定义 twig 扩展类(如 globalextension)注入,不支持运行时 addglobal() 或 @template 传参,修改后须清缓存。

Symfony 2.2.11 是一个较老的版本(发布于 2013 年左右),其模板引擎默认使用 Twig,全局变量需通过 Twig 的 global 机制或 Symfony 的 twig.globals 配置注入,不能直接在模板里用 PHP 方式定义全局变量。
以下是适用于 Symfony 2.2.11 的两种可靠方法:
-
方式一:在 config.yml 中配置 twig.globals(推荐)
在app/config/config.yml中添加:twig: globals: site_name: "我的网站" debug_mode: "%kernel.debug%" app_version: "2.2.11"然后在任何 Twig 模板中可直接使用:
<title>{{ site_name }} - v{{ app_version }}</title> -
方式二:通过 Twig 扩展类注入动态全局变量
创建服务类(如src/Acme/DemoBundle/Twig/GlobalExtension.php):<?php namespace Acme\DemoBundle\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; class GlobalExtension extends AbstractExtension { public function getGlobals() { return array( 'current_year' => date('Y'), 'base_url' => $_SERVER['HTTP_HOST'], ); } }再在
services.yml中注册为 Twig 扩展:services: acme_demo.twig.global_extension: class: Acme\DemoBundle\Twig\GlobalExtension tags: - { name: twig.extension }
注意:Symfony 2.2.x 不支持 addGlobal() 方法在运行时调用(那是 Twig 1.x 的旧 API,且需手动获取 Twig_Environment 实例,不推荐);也不支持 @Template 注解中传全局变量——它只用于控制器返回的模板变量。
变量值若含对象或服务,需确保该对象可序列化(Twig 渲染时会尝试访问属性/方法),否则可能报错。简单标量(字符串、布尔、数字)最安全。
不复杂但容易忽略:twig.globals 中的值在容器编译时固化,修改后需清除缓存(php app/console cache:clear)。











