TLD的Symfony2语言

时间:2011-10-26 08:07:03

标签: symfony listener locale

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

我已经找到了一种方法来改变语言:http://symfony.com/blog/play-with-the-user-language

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

  • www.hostname.fr => FR
  • www.hostname.it =>它
  • www.hostname.co.uk =>烯

现在我添加一个触发每个请求的服务侦听器:

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 个答案:

答案 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;
    }

    ...
}