#symfony #settings #symfony4
#symfony #Настройки #symfony4
Вопрос:
я настраиваю глобальные настройки, чтобы достичь этого во всех шаблонах twig. так что я также могу, например, установить страницы error.html.twig.
Я нашел описание для этого очень коротким. Глобальные переменные реализуются в twig.yaml, а для переменных из базы данных пишется сервис. смотрите мою попытку ниже 🙂 однако это пока не работает : (
я думаю, что мой сервис написан некорректно. пожалуйста, помогите 🙂
twig:
globals:
setting: '@AppServiceWebsitesettings'
мой файл сервиса
<?php
namespace AppService;
use AppEntitySitesetting;
class Websitesettings
{
public function setting()
{
$setting = $this->getDoctrine()->getRepository(Sitesetting::class)
->findAll()[0];
return $setting;
}
}
Комментарии:
1. завершен ли ваш класс Websitesettings, который вы публикуете здесь?
2. да? 🙂 это просто данные, которые может заполнить администратор, и я хочу, чтобы они отображались глобально
Ответ №1:
случайный класс не может просто вызывать $this->getDoctrine()
внутри своих методов и ожидать получения некоторого объекта. Как бы PHP теперь, откуда это взять? Как бы проверка / отражение кода даже предполагала, как getDoctrine
предполагается определить?
Вместо этого вам следует ввести EntityManagerInterface
в конструктор, потому что таким образом Symfony (фреймворк) и его автоматическое подключение могут разумно определить ожидаемый параметр для вашего сервиса, а подсказка типа подскажет ему, что вводить:
<?php
namespace AppService;
use Doctrine
use DoctrineORMEntityManagerInterface;
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 обладают некоторыми очень приятными функциями, с помощью которых вы могли бы предоставить определенные параметры в самой конфигурации или через переменные окружения. Но это выходит за рамки вопроса.
Комментарии:
1. настройки веб-сайта — это то, что администратор может заполнить, чтобы его можно было отобразить во внешнем интерфейсе. (например, имя сайта, адрес, Google api, номера телефонов). Я имею в виду не общие настройки сайта, если вы это имеете в виду?…. Спасибо за отзыв. позвольте мне попробовать 🙂
2. Хорошо, итак, я внедрил ваш код. но я еще не там. Я не могу получить конкретные поля. code
e.g. Neither the property "phone" nor one of the methods "phone()", "getphone()"/"isphone()"/"hasphone()" or "__call()" exist and have public access in class "AppServiceWebsitesettings".
code` и я знаю, что вызов этого поля обычно работает, как я вижу это на indexpage по сравнению со страницей ошибки, которая загружается только прямо из base.html.twig. я называю поля в twig следующим образом ‘code'{{ setting.phone }}’код’3. нет,
setting
это возвращаемое значение не вашегоsetting
метода, аWebsitesetting
сервиса. итак, вам пришлось бы написатьsetting.setting.phone
. который является: Websitesetting(=»настройка»).setting()[«телефон»]4. аааа, я только что попробовал id. Это работает!! да 🙂 большое вам спасибо!
5. мне пришлось искать это, но я нашел кнопку «Принять» 🙂 отличный ответ!