无法在Symfony 4中创建Twig全局变量

时间:2018-07-01 12:57:36

标签: symfony twig symfony4 twig-extension

我已经使用Symfony 3.3进行了此操作,但是使用Symfony 4则无法正常工作。

App \ Twig \ NotifExt:

    public function getGlobals(){

    $count = 'Hello World';

    return array('count' => $count);        
}

twig_extensions.yaml:

twig:
     globals:
          'count': '%count%'

base.html.twig:

<a class="nav-item nav-link" href="#">{{ count }} </a>

我在以前的版本中做了类似的事情,并且运行良好,但是在Symfony 4中,出现以下错误:

  

您请求的参数“ count”不存在。

2 个答案:

答案 0 :(得分:1)

第一步是从twig全局变量中定义的count变量中删除单引号。

在您的问题中,您似乎使用参数定义了count键,但要使用服务(类),请阅读How to Inject Variables into all Templates (i.e. global Variables)

twig:
    globals:
        yourService: '@App\YourService\Class'

,然后引用服务方法以获取count密钥:

{{ yourService.getCount() }}

您有很多方法可以做到这一点,但是您可以尝试使用这个简单的示例来获得更多的想法。

如果问题仍未解决,则可能需要升级您的问题,并提供有关如何设置count键的更多详细信息。

PS:您是否清除了缓存?

答案 1 :(得分:0)

在检查类似问题时,我发现了其他东西-这可能对某人有用。

如果您渲染单个块(使用$twig->renderBlock())而不是进行完整渲染,则全局变量不会自动合并,因此您需要执行以下操作:

        $context = $this->twig->mergeGlobals($parameters);
        $body = $template->renderBlock('body', $context);

更多信息: https://github.com/symfony/symfony/issues/8517#issuecomment-21238584