我是Symfony2的新手,我正在寻找选择我的主机名TLD的语言。 (以适当的方式)
我已经找到了一种方法来改变语言:http://symfony.com/blog/play-with-the-user-language
但我需要能够在新用户连接时选择语言:
现在我添加一个触发每个请求的服务侦听器:
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');
我想知道是否有另一种方法可以访问监听器中的参数 或者使用主机名
选择语言的另一种方法感谢您的回答。
答案 0 :(得分:7)
你快到了。你现在唯一要做的就是使用“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;
}
...
}