Язык Symfony2 для TLD

#symfony #listener #locale

#symfony #слушатель #язык

Вопрос:

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

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

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

  • www.hostname.fr => фр
  • www.hostname.it => это
  • www.hostname.co.uk => ru

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

 services:
    kernel.listener.domain_langue_listener:
        class: acmeDemoBundleListenerDomainLangueListener
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
  

С помощью класса:

 namespace acmeDemoBundleListener;
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:

Вы почти на месте. Единственное, что вам нужно сделать сейчас, это ввести параметры в ваш слушатель, используя «аргументы» (аргументы для конструктора). %foobar% ссылается на параметр «foobar», @foobar ссылается на службу «foobar».

 parameters:
    tld_allowed: en,fr,de

services:
    kernel.listener.domain_langue_listener:
        class: acmeDemoBundleListenerDomainLangueListener
        arguments:
            - %tld_allowed%
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
  

И слушатель:

 namespace acmeDemoBundleListener;
class DomainLangueListener
{
    public function __construct($tldAllowed)
    {
        $this->tldAllowed = $tldAllowed;
    }

    ...
}