179

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

parameters:
    app.version: 0.1.0

我可以在控制器中使用这个配置参数,但我不知道如何在我的 Twig 模板中获取它。

4

8 回答 8

417

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

参数配置:

parameters:
    app.version: 0.1.0

树枝配置:

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

树枝模板:

{{ version }}

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

$container->getParameter('app.version');
于 2011-12-02T17:20:25.827 回答
191

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

twig:
    globals:
        version: "0.1.0"

并在您的模板中访问它

{{ version }}

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

于 2011-07-22T19:40:07.390 回答
90

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

# 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

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

于 2012-03-28T13:58:29.190 回答
19

在较新版本的 Symfony2 上(使用 aparameters.yml而不是parameters.ini),您可以存储对象或数组而不是键值对,因此您可以通过以下方式管理全局变量:

config.yml(仅编辑一次):

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

参数.yml:

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

然后在 twig 文件中,您可以使用{{ project.version }}{{ project.name }}.

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

于 2013-05-05T15:32:51.607 回答
16

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

配置.yml

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

应用程序.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 }}

为了更好地理解,我提到了不同之处。

于 2013-07-14T16:59:10.370 回答
13

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

服务.yml:

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }
于 2016-08-04T17:00:25.947 回答
1

You can simply bind $this->getParameter('app.version') in controller to twig param and then render it.

于 2016-05-07T11:29:54.180 回答
-1

在confing.yml

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

在树枝视图中

# twig view
{{ version }}
于 2017-04-21T07:46:50.830 回答