【发布时间】:2011-10-10 21:37:52
【问题描述】:
我有一个 Symfony2 Twig 模板。我想在这个树枝模板中输出一个配置参数的值(一个版本号)。因此我定义了这样的配置参数:
parameters:
app.version: 0.1.0
我可以在控制器中使用此配置参数,但我不知道如何在我的 Twig 模板中获取它。
【问题讨论】:
标签: symfony configuration twig
我有一个 Symfony2 Twig 模板。我想在这个树枝模板中输出一个配置参数的值(一个版本号)。因此我定义了这样的配置参数:
parameters:
app.version: 0.1.0
我可以在控制器中使用此配置参数,但我不知道如何在我的 Twig 模板中获取它。
【问题讨论】:
标签: symfony configuration twig
很容易,您可以在配置文件中定义:
twig:
globals:
version: "0.1.0"
并在您的模板中访问它
{{ version }}
否则它必须是一种带有 Twig 扩展的方式来公开你的参数。
【讨论】:
您可以在配置的twig globals 部分使用参数替换:
参数配置:
parameters:
app.version: 0.1.0
树枝配置:
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%"
现在,变量 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
如果你要设置的全局变量更复杂——比如一个对象——那么你将无法使用上述方法。相反,您需要 create a Twig Extension 并将全局变量作为 getGlobals 方法中的条目之一返回。
【讨论】:
在较新版本的 Symfony2 上(使用 parameters.yml 而不是 parameters.ini),您可以存储对象或数组而不是键值对,因此您可以通过这种方式管理全局变量:
config.yml(只编辑一次):
# app/config/config.yml
twig:
globals:
project: %project%
parameters.yml:
# app/config/parameters.yml
project:
name: myproject.com
version: 1.1.42
然后在 twig 文件中,您可以使用 {{ 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);
}
模板/树枝文件:
Project version {{ app_version }}
我提到了不同之处以便更好地理解。
【讨论】:
您可以简单地将控制器中的$this->getParameter('app.version') 绑定到 twig 参数,然后进行渲染。
【讨论】:
使用 Twig 扩展,您可以创建 parameterTwig 函数:
{{ 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 }
【讨论】:
在confing.yml中
# app/config/config.yml
twig:
globals:
version: '%app.version%'
在树枝视图中
# twig view
{{ version }}
【讨论】: