#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;
}
...
}