symfony 4使用服务来设置全局设置以在树枝中实现

时间:2019-04-03 17:40:49

标签: symfony settings symfony4

我正在设置全局设置,以在所有树枝模板中实现此目的。因此,我还可以例如设置error.html.twig页面。

我发现描述很简短。 您可以在twig.yaml中实现全局变量,并为数据库中的变量编写服务。见下面我的尝试:)但是还没有用:(

我认为我的服务不正确。请帮助:)

twig:

  globals:
    setting: '@App\Service\Websitesettings'

我的服务文件

<?php
namespace App\Service;
use App\Entity\Sitesetting;


class Websitesettings
{
    public function setting()
    {
        $setting = $this->getDoctrine()->getRepository(Sitesetting::class)
            ->findAll()[0];

        return $setting;
    }
}

1 个答案:

答案 0 :(得分:0)

随机类不能只在其方法内调用$this->getDoctrine()并期望得到一些对象。 PHP现在将如何从中获得呢?代码检查/反射甚至会如何假设,应该如何定义getDoctrine

相反,您应该将EntityManagerInterface注入构造函数中,因为这样,Symfony(框架)及其自动装配可以合理地为您的服务标识期望的参数,并且类型提示将告诉它要做什么。注入:

<?php
namespace App\Service;
use Doctrine
use Doctrine\ORM\EntityManagerInterface;


class Websitesettings
{
    /** @var EntityManagerInterface */
    public $em;

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

    public function setting()
    {
        $setting = $this->em->getRepository(Sitesetting::class)
            ->findAll()[0];

        return $setting;
    }
}

希望有帮助。

但是,潜在的问题是:您确定这是执行此操作的最佳方法吗?显然,您有一整个表专用于您的站点设置,并且显然只包含一行(这很可悲)。 Yaml和Symfony具有一些非常好的功能,您可以使用它们在配置本身中或通过环境变量提供某些参数。但这超出了问题。