如何在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')) }}