Reputation: 83
I have website which have three different translations, by default it is english, each translation is placed under his own subdomain. What I am trying to do, is redirect from subdomain de.mydomain.com to mydomain.com and set the translation's language in session variable named "locale", but the problem is that after redirection this session's variable disappears
config.yml
framework:
session:
lifetime: 3600
cookie_domain: .mydomain
SubdomainListener:
class SubdomainListener
{
protected $domain;
/* @var Translator */
protected $translator;
/* @var Router */
protected $router;
public function __construct($domain, $translator, $router)
{
$this->domain = $domain;
$this->translator = $translator;
$this->router = $router;
}
public function onDomainParse(GetResponseEvent $event)
{
if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
// don't do anything if it's not the master request
return;
}
/* @var $request Request */
$request = $event->getRequest();
/* @var $session Session */
$session = $request->getSession();
$host = $request->getHost();
$subDomain = str_replace($this->domain, '', $host);
$supportedTranslations = array('pl_PL', 'en_US', 'de_DE');
$preferredLanguage = $request->getPreferredLanguage();
if (!in_array($preferredLanguage, $supportedTranslations)) {
$preferredLanguage = 'en_US';
}
if (strlen($subDomain) > 0) {
if ($subDomain == "pl.") {
$preferredLanguage = "pl_PL";
} elseif ($subDomain == "en.") {
$preferredLanguage = "en_US";
} elseif ($subDomain == "de.") {
$preferredLanguage = "de_DE";
}
$route = $request->get('_route');
$routeParams = $request->get('_route_params');
if (strpos($route, '_sd') === false) {
$route = $route . '_sd';
}
$url = $this->router->generate($route, $routeParams);
$session->set('redirected', 1);
$session->set('locale', $preferredLanguage);
$this->translator->setLocale($preferredLanguage);
$event->setResponse(new RedirectResponse($url, 301));
}
if (!$session->get('redirected')) {
$session->set('locale', $preferredLanguage);
$this->translator->setLocale($preferredLanguage);
}
}
}
Upvotes: 2
Views: 4491
Reputation: 17976
The reason for this "loss" is probably a usage of a non-domain cookie.
To turn this feature on you should specify your domain in the config. According to docs, for 2.2
and 2.1
versions of Symfony:
framework:
session:
cookie_domain: .yoursite.com
Upvotes: 2