Symfony 4 настройка глобальных настроек с сервисом для реализации в ветке - PullRequest
1 голос
/ 03 апреля 2019

Я устанавливаю глобальные настройки, чтобы достичь этого во всех шаблонах веток. поэтому я также могу, например, установить страницы 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 голосов
/ 03 апреля 2019

случайный класс не может просто вызвать $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 есть несколько очень полезных функций, с помощью которых вы можете предоставить определенные параметры в самой конфигурации или через переменные окружения. Но это выходит за рамки вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...