我正在使用symfony 2.8和twig 1.2,我想知道是否有办法为树枝模板设置全局变量,我不想进入每个树枝文件并更改值,如果有是一个中心的地方,我可以设置变量值,并在任何树枝文件中使用它,无论它们在哪个目录都很棒。
截至目前我在paramaters.yml
文件中定义了键值
parameters:
client_name: 'naruto uzumaki'
然后在控制器里面我有
<?php
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyController extends Controller
{
public function editAction()
{
$var = $this->container->getParameter('client_name');
return $this->render("UserBundle:edit:edit.html.twig", array('var' => $var));
}
}
然后在树枝内显示它,
<h1>Hello, {{ var }}</h1>
我想避免在控制器中调用服务容器并直接访问twig文件中的client_name
值,任何帮助都将不胜感激
-dheeraj
答案 0 :(得分:4)
是的,您可以在配置文件中
# app/config/config.yml
twig:
globals:
my_global_variable: '%client_name%'
然后在Twig:
{{ my_global_variable }}
不要害怕在谷歌搜索解决方案,这是“全球变量”的第一个结果&#39;是:
http://symfony.com/doc/current/cookbook/templating/global_variables.html
答案 1 :(得分:3)
在config.yml中尝试:
mvn deploy
在你的树枝上,你可以轻松访问它:
twig:
# ...
globals:
global_var: %client_name%'
您也可以尝试引用服务。请参阅文档http://symfony.com/doc/2.8/cookbook/templating/global_variables.html#referencing-services
答案 2 :(得分:0)
为单独使用Twig(即项目的其余部分不是基于Symfony构建)的情况添加答案。
扩展样本
class CustomTwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{
private $globals;
public function __construct(array $globals) {
$this->globals = $globals;
}
public function getGlobals() {
return $this->globals;
}
}
配置树枝:
// where twig is created
$loader = new Twig_Loader_Filesystem('/path/to/templates'); // or whatever loader you would use
$globals = ['global_var' => 'whatever'];
$globalsExtension = new CustomTwigExtension($globals);
$twig = new Twig_Environment($loader);
$twig->addExtension($globalsExtension);
在模板中:
<div>{{ global_var }}</div>