如何在Symfony2 Twig模板中获取configuration参数

我有一个Symfony2枝条模板。 我想输出一个configuration参数在这个树枝模板(一个版本号)的值。 所以我定义了这样的configuration参数:

parameters: app.version: 0.1.0 

我能够在控制器中使用此configuration参数,但我不知道如何在我的树枝模板中获取它。

很容易,你可以在你的configuration文件中定义:

 twig: globals: version: "0.1.0" 

并在您的模板访问它

 {{ version }} 

否则,它必须是一个Twig扩展的方式来公开你的参数。

你可以在config的twig globals部分使用参数replace:

参数configuration:

 parameters: app.version: 0.1.0 

小枝configuration:

 twig: globals: version: '%app.version%' 

枝杈模板:

 {{ version }} 

此方法提供了允许您在ContainerAware类中使用参数的好处,方法如下:

 $container->getParameter('app.version'); 

您还可以利用内置的服务参数系统,它可以让您隔离或重用该值:

 # app/config/parameters.yml parameters: ga_tracking: UA-xxxxx-x # app/config/config.yml twig: globals: ga_tracking: "%ga_tracking%" 

现在,variablesga_tracking在所有的Twig模板中都可用:

 <p>The google tracking code is: {{ ga_tracking }}</p> 

该参数在控制器内也是可用的:

 $this->container->getParameter('ga_tracking'); 

您也可以将一个服务定义为一个全局的Twigvariables(Symfony2.2 +):

 # app/config/config.yml twig: # ... globals: user_management: "@acme_user.user_management" 

http://symfony.com/doc/current/templating/global_variables.html

如果你想设置的全局variables更复杂 – 比如一个对象 – 那么你将无法使用上述方法。 相反,您需要创build一个Twig Extension ,并将全局variables作为getGlobals方法中的条目之一返回。

在较新版本的Symfony2上(使用parameters.yml而不是parameters.ini ),你可以存储对象或数组而不是键值对,这样你就可以pipe理你的全局variables:

config.yml(只编辑一次):

 # app/config/config.yml twig: globals: project: %project% 

parameters.yml:

 # app/config/parameters.yml project: name: myproject.com version: 1.1.42 

然后在一个树枝文件中,可以使用{{ project.version }}{{ project.name }}

注意:我个人不喜欢把东西添加到app ,只是因为这是Symfony的variables,我不知道将来会存储什么东西。

上面给出的答案是正确的,工作正常。 我以不同的方式使用。

config.yml

 imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: app.yml } - { resource: app_twig.yml } 

app.yml

 parameters: app.version: 1.0.1 

app_twig.yml

 twig: globals: version: %app.version% 

内部控制器:

 $application_version = $this->container->getParameter('app.version'); // Here using app.yml 

内部模板/树枝文件:

 Project version {{ version }}! {# Here using app_twig.yml content. #} {# Because in controller we used $application_version #} 

要使用控制器输出:

控制器:

 public function indexAction() { $application_version = $this->container->getParameter('app.version'); return array('app_version' => $application_version); } 

模板/树枝文件:

 Project version {{ app_version }} 

我提到不同的更好的理解。

用Twig扩展名,你可以创build一个parameter Twig函数:

 {{ parameter('jira_host') }} 

TwigExtension.php:

 class TwigExtension extends \Twig_Extension { public $container; public function getFunctions() { return [ new \Twig_SimpleFunction('parameter', function($name) { return $this->container->getParameter($name); }) ]; } /** * Returns the name of the extension. * * @return string The extension name */ public function getName() { return 'iz'; } } 

service.yml:

  iz.twig.extension: class: IzBundle\Services\TwigExtension properties: container: "@service_container" tags: - { name: twig.extension } 

你可以简单地在控制器中绑定$this->getParameter('app.version')$this->getParameter('app.version')参数,然后渲染它。

在confing.yml中

 # app/config/config.yml twig: globals: container: '@service_container' 

在枝杈视图

 # twig view {{ container.parameter('app.version')) }}