Я пытаюсь выяснить, почему моя локаль отличается на одном из моих контроллеров и когда я получаю запрос из стека запросов.
Вот пример одного из моих маршрутов: '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"?
}
}
Что я делаю не так?