Язык 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;
    }

    ...
}