Symfony, как получить текущего пользователя (FOS) в объекте, неиспользуемый __construct ()?

У меня сущность Book. Название этого Book хранится на разных языках (объект Book связан с BookTranslates как OneToMane).

Сущность Book используется как поле формы в нескольких местах (например, select). Для этого мне нужно установить __toString () для объекта Book, который вернет название Book на языке пользователя.

Я попытался ввести пользователя внутрь объекта, передав TokenStorageInterface в методе __construct () класса Book, но доктрина никогда не вызывает метод __construct () в этом случае.

Краткая постановка задачи: __toString () в сущности должен возвращать поле одной из связанных сущностей. Какие конкретно связанные сущности - зависит от текущего пользователя. Как это правильно реализовать?

Я рекомендую использовать github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/doc/…, не позволяйте сущности переводить себя

fucethebads 22.08.2018 10:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это одно из возможных решений:

Пожалуйста, оставьте сущность __construct в покое.

Я предполагаю, что у вас есть сущность с translations. Ваша сущность может (должна) иметь такой метод, как setCurrentLocale, чтобы знать текущую локаль. Метод можно вызвать вручную или, например, в Doctrine2 postLoad событие:

public function setCurrentLocale(string $locale)
{
    $this->locale - $locale;
}

Теперь в __toString при переводе, например. title ваша сущность может получить правильный перевод.

Другие вопросы по теме