Локаль запроса отличается: аргумент контроллера vs RequestStack - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь выяснить, почему моя локаль отличается на одном из моих контроллеров и когда я получаю запрос из стека запросов.

Вот пример одного из моих маршрутов: 'website.com/ nl '

/**
 * Main page of the website
 * @Route("/{_locale}",
 *     name="home",
 *     defaults={"_locale": "nl"},
 *     requirements={
 *         "_locale": "nl|en|fr"
 *     },
 * )
 * @param Request $request
 * @param $_locale
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function home(
    Request $request,
    $_locale
) {
    // $_locale === "nl"
    // $request->getLocale() === "nl"
}

Как и ожидалось, исходя из URL, языковой стандарт NL

Теперь, когда мне нужен языковой стандарт в одном из моих сервисов или прослушивателей событий, мне нужно использовать RequestStack->getCurrentRequest()->getLocale().Однако для этого языкового стандарта всегда устанавливается языковой стандарт: "en"

Отображение службы:

app.doctrine.locale_listener:
    class: App\EventListener\LocaleListener
    public: false
    arguments: ["@request_stack"]
    lazy: true
    tags:
      - { name: "doctrine.orm.entity_listener", entity: App\Entity\Translation\Translatable, event: postLoad }

Слушатель объекта:

namespace App\EventListener;

use App\Entity\Translation\Translatable;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\HttpFoundation\RequestStack;

class LocaleListener
{
    private $currentLocale;
    public function __construct(RequestStack $rs)
    {
        $this->currentLocale = $rs->getCurrentRequest()->getLocale();
        // $this->currentLocale === "en"
    }

    public function postLoad(Translatable $translatable, LifecycleEventArgs $args)
    {
        $translatable->setLocale($this->currentLocale);
        // e.g. url: mywebsite.be/nl
        // Why is $this->currentLocale === "en"?
    }
}

Что я делаю не так?

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