如何在 Symfony2Twig 模板中获取配置参数

我有一个 Symfony2 Twig 模板。我想在这个树枝模板(版本号)中输出一个配置参数的值。因此,我像下面这样定义了 config 参数:

parameters:
app.version: 0.1.0

我能够在 Controller 中使用这个配置参数,但是我不知道如何在 Twig 模板中获得它。

173360 次浏览

您可以很容易地在配置文件中定义:

twig:
globals:
version: "0.1.0"

并在您的模板中访问它

\{\{ version }}

否则,它必须是一种带有 Twig 扩展的方式来公开您的参数。

可以在配置的 嫩枝全局部分中使用参数替换:

参数配置:

parameters:
app.version: 0.1.0

Twig 配置:

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%"

现在,变量 追踪可以在所有的 Twig 模板中找到:

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

这个参数在控制器中也是可用的:

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

您还可以将服务定义为全局 Twig 变量(Symfony2.2 +) :

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

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

如果您想要设置的全局变量比较复杂-比如一个对象-那么您将无法使用上面的方法。相反,您需要使用 创建一个细枝扩展并将全局变量作为 getGlobals 方法中的条目之一返回。

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

Yml (仅编辑一次) :

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

Yml:

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

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

注意: 我个人不喜欢向 app中添加东西,因为那是 Symfony 的变量,我不知道将来存储在那里的是什么。

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

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);
}

Template/twig 文件:

Project version \{\{ app_version }}

为了更好的理解,我提到了不同。

您可以简单地将控制器中的 $this->getParameter('app.version')绑定到 twig param,然后呈现它。

使用 Twig 扩展,您可以创建一个 parameterTwig 函数:

\{\{ parameter('jira_host') }}

返回文章页面

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';
}
}

返回文章页面

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

在谈话中

# app/config/config.yml
twig:
globals:
version: '%app.version%'

在 Twig 视野中

# twig view
\{\{ version }}