用于TLD的Symfony2语言

用于TLD的Symfony2语言,symfony,listener,locale,Symfony,Listener,Locale,我是Symfony2的新手,我正在寻找选择带有主机名TLD的语言。 (以适当的方式) 我已经找到了一些方法,可以通过一个表单改变语言: 但我需要能够在新用户连接时选择语言: www.hostname.fr=>fr www.hostname.it=>it www.hostname.co.uk=>en 现在,我添加了一个服务侦听器,用于触发每个请求: services: kernel.listener.domain_langue_listener: class: acme

我是Symfony2的新手,我正在寻找选择带有主机名TLD的语言。 (以适当的方式)

我已经找到了一些方法,可以通过一个表单改变语言:

但我需要能够在新用户连接时选择语言:

  • www.hostname.fr=>fr
  • www.hostname.it=>it
  • www.hostname.co.uk=>en
现在,我添加了一个服务侦听器,用于触发每个请求:

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');
我想知道是否有其他方法可以访问侦听器中的参数 或者用另一种方法选择具有主机名的语言


谢谢你的回答。

你就快到了。现在唯一需要做的就是使用“参数”(构造函数的参数)将参数注入到侦听器中<代码>%foobar%表示“foobar”参数,
@foobar
表示“foobar”服务

听众:

namespace acme\DemoBundle\Listener;
class DomainLangueListener
{
    public function __construct($tldAllowed)
    {
        $this->tldAllowed = $tldAllowed;
    }

    ...
}
namespace acme\DemoBundle\Listener;
class DomainLangueListener
{
    public function __construct($tldAllowed)
    {
        $this->tldAllowed = $tldAllowed;
    }

    ...
}