3

我需要使用 Symfony2 向我的所有视图(树枝模板)发送一个参数。

每个视图都扩展了一个特殊的视图 : base.html.twig,所以我想我只需要将这个参数发送到这个基本视图。

  • 但我该怎么做呢?

这是我在我的 php 文件中获取此参数的方式:

$svn = File('.svn/entries');
$svnrev = $svn[3];

其中代表当前修订的数量。

  • 有没有办法在 a 中检索这个变量.yml
4

1 回答 1

6

您应该使用 twig 扩展名注册一个全局变量。

班上

// src/Acme/YourBundle/Twig/SvnExtension.php
namespace Acme\YourBundle\Twig;

class SvnExtension extends \Twig_Extension
{
    public function getGlobals()
    {
        // you might need to adapt the file path
        $svn = File('.svn/entries');

        return array(
            'svn_rev' => $svn[3]
        );
    }

    public function getName()
    {
        return 'svn_extension';
    }
}

服务定义

# i.e. app/config/config.yml 
services:
    acme.twig.svn_extension:
        class: Acme\DemoBundle\Twig\SvnExtension
        tags:
            - { name: twig.extension }

访问变量

现在您的变量可以像往常一样在每个树枝模板中访问:

{{ svn_rev }}

进一步的改进包括:

  • 从参数或环境变量中获取文件名(如果 svn repo 存储在其他地方)
  • 使用 apc(u) / memcache / 缓存文件以提高性能
  • 添加更多 svn 信息并将变量本身转换为数组( svn.rev , svn.state ,...)
  • ...
于 2013-10-27T19:26:30.920 回答