Язык Symfony2 для TLD - PullRequest
       9

Язык Symfony2 для TLD

10 голосов
/ 26 октября 2011

Я новичок в Symfony2, и я ищу, чтобы выбрать язык с TLD моего имени хоста. (правильно)

Я уже нахожу способ изменить язык с помощью формы: http://symfony.com/blog/play-with-the-user-language

Но мне нужно иметь возможность выбирать язык при подключении нового пользователя:

  • www.hostname.fr => fr
  • www.hostname.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 соответствует какому языку, но в слушателе я не могу получить доступ к контейнеру следующим образом:

$this->container->getParameter('tld_allowed');

Я хотел бы знать, есть ли другой способ доступа к параметрам в слушателе Или другой способ выбрать язык с именем хоста

Спасибо за ваши ответы.

1 Ответ

7 голосов
/ 26 октября 2011

Ты почти у цели. Единственное, что вам нужно сделать сейчас, это ввести параметры в ваш слушатель, используя «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;
    }

    ...
}
...