Язык Symfony2 для TLD
Я новичок в Symfony2, и я ищу язык с TLD моего имени хоста.
(надлежащим образом)
Я уже нашел способ изменить язык с помощью формы: http://symfony.com/blog/play-with-the-user-language
Но мне нужно иметь возможность выбирать язык, когда новый пользователь подключается:
- www.hostname.fr = > fr
- www.hostname.it = > it
- www.hostname.co.uk = > ru
На данный момент я добавляю слушатель службы, который запускает для каждого запроса:
services:
kernel.listener.domain_langue_listener:
class: acme\DemoBundle\Listener\DomainLangueListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
С классом:
namespace acme\DemoBundle\Listener;
class DomainLangueListener
{
public function onDomainParse(Event $event)
{
$request = $event->getRequest();
$session = $request->getSession();
preg_match('/[^.]+$/', $request->getHost(), $match);
$session->setLocale($match[0]);
}
}
Этот прослушиватель работает, но я хотел бы использовать некоторые параметры для определения того, какой TLD соответствует, с каким языком, но в Listener я не могу получить доступ к контейнеру:
$this->container->getParameter('tld_allowed');
Я хотел бы знать, есть ли другой способ доступа к параметрам в слушателе
Или другим способом выбрать язык с именем хоста
Спасибо за ваши ответы.
Ответы
Ответ 1
Ты почти там. Единственное, что вам нужно сделать сейчас - это ввести параметры в ваш слушатель, используя "arguments" (аргументы для конструктора). %foobar%
относится к параметру "foobar", @foobar
относится к службе "foobar".
parameters:
tld_allowed: en,fr,de
services:
kernel.listener.domain_langue_listener:
class: acme\DemoBundle\Listener\DomainLangueListener
arguments:
- %tld_allowed%
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
И слушатель:
namespace acme\DemoBundle\Listener;
class DomainLangueListener
{
public function __construct($tldAllowed)
{
$this->tldAllowed = $tldAllowed;
}
...
}