У меня сущность Book. Название этого Book хранится на разных языках (объект Book связан с BookTranslates как OneToMane).
Сущность Book используется как поле формы в нескольких местах (например, select). Для этого мне нужно установить __toString () для объекта Book, который вернет название Book на языке пользователя.
Я попытался ввести пользователя внутрь объекта, передав TokenStorageInterface в методе __construct () класса Book, но доктрина никогда не вызывает метод __construct () в этом случае.
Краткая постановка задачи:
__toString () в сущности должен возвращать поле одной из связанных сущностей. Какие конкретно связанные сущности - зависит от текущего пользователя. Как это правильно реализовать?




Это одно из возможных решений:
Пожалуйста, оставьте сущность __construct в покое.
Я предполагаю, что у вас есть сущность с translations. Ваша сущность может (должна) иметь такой метод, как setCurrentLocale, чтобы знать текущую локаль. Метод можно вызвать вручную или, например, в Doctrine2 postLoad событие:
public function setCurrentLocale(string $locale)
{
$this->locale - $locale;
}
Теперь в __toString при переводе, например. title ваша сущность может получить правильный перевод.
Я рекомендую использовать github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/doc/…, не позволяйте сущности переводить себя