Как получить запрос или локаль в экземпляре объекта? - PullRequest
0 голосов
/ 11 января 2020

Для некоторых целей перевода мне нужно получить запрос или локаль в моих сущностях.

Я пытался сделать то, что написано здесь , но оно не работает с сущностями.

/**
 * AccessoryType constructor.
 *
 * @param RequestStack $requestStack
 */
public function __construct(RequestStack $requestStack) {
    $this->request=$requestStack->getCurrentRequest();
}

Я получаю следующее сообщение об ошибке (которое, я думаю, должно быть исключено ...)

Слишком мало аргументов для функции App \ Entity \ Map :: __ construct ( ), 0 передано в / var / www/sphere/src/Controller/MapController.php в строке 34 и ровно 1 ожидается

Моя конечная цель - вызвать правильный метод получения, основанный на локали, в основном для форм, использующих __toString() для генерации имени поля.

/**
 * @return string
 */
public function __toString() {
    if($this->request->getLocale() != 'en') {
        $call='getName'.ucfirst($this->request->getLocale());

        return strlen($this->$call()) > 0 ? $this->$call() : $this->getName();
    } else {
        return $this->getName();
    }
}

Есть ли какие-либо предложения для получения запроса или локали внутри объекта?

1 Ответ

1 голос
/ 12 января 2020

По умолчанию сущности не подключаются автоматически, поэтому службы не внедряются в сущности.

Вы можете найти это в этой декларации services.yaml (ваша может отличаться, если вы ее изменили, но, по всей вероятности, это это то, что у вас есть):

# services.yaml
# ...
# makes classes in src/ available to be used as services
  # this creates a service per class whose id is the fully-qualified class name
  App\:
    resource: '../src/*'
    exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

exclude делает все классы в пределах src/Entity исключенными из автоматического подключения.

Вы могли бы изменить это. Например, вы можете удалить Entity из этого списка, но вы также сконфигурируете все свои сущности в сервисы, что явно не имеет смысла.

В общем, идея внедрить сервисы в вашу сущность занятия не кажутся особенно хорошими. Внедрение стека запросов выглядит особенно неуместным, поскольку это внешняя проблема, которая совершенно не имеет отношения к модельному объекту.

Оставьте перевод, чтобы он оставался внешней задачей, и обслуживайте свои объекты.

...