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

问题描述 投票:1回答:1

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

我发现这个描述非常简短。您可以在twig.yaml中实现全局变量,并在编写服务的db中实现变量。看到我的尝试下面:)但它还没有工作:(

我认为我的服务写得不正确。请帮忙 :)

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;
    }
}
symfony settings symfony4
1个回答
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有一些非常好的功能,您可以在配置本身或通过环境变量提供某些参数。但这超出了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.