如何在symfony模板中有来自db的全局变量?

use*_*704 6 symfony doctrine-orm twig twig-extension

如何在symfony模板中拥有全局变量?我确实读过这个, 但我更喜欢从数据库中获取参数,我认为这个服务将在启动之前加载,然后才能从db中获取任何内容.是否有可能这样做?

Ala*_*blo 11

编辑:使用Symfony 3.4+语法在2019年更新.

注入实体管理器创建一个Twig扩展:

Fuz/AppBundle/Twig/Extension/DatabaseGlobalsExtension.php

<?php

namespace Fuz\AppBundle\Twig\Extension;

use Doctrine\ORM\EntityManager;
use Twig\Extension\AbstractExtension;
use Twig\Extension\GlobalsInterface;

class DatabaseGlobalsExtension extends AbstractExtension implements GlobalsInterface
{

   protected $em;

   public function __construct(EntityManager $em)
   {
      $this->em = $em;
   }

   public function getGlobals()
   {
      return [
          'myVariable' => $this->em->getRepository(FuzAppBundle\Entity::class)->getSomeData(),
      ];
   }
}
Run Code Online (Sandbox Code Playgroud)

在您注册您的扩展Fuz/AppBundle/Resources/config/services.yml:

services:
    _defaults:
        autowire: true
        autoconfigure: true 

    Fuz\AppBundle\Twig\Extension\DatabaseGlobalsExtension: ~
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用实体管理器执行所需的请求.

不要忘记替换路径和名称空间以与您的应用程序匹配.