【问题标题】:Symfony2 Language for TLD用于 TLD 的 Symfony2 语言
【发布时间】:2011-12-15 13:17:25
【问题描述】:

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

我已经找到了用表单更改语言的方法:http://symfony.com/blog/play-with-the-user-language

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

  • www.hostname.fr => fr
  • www.hostname.it => 它
  • www.hostname.co.uk => zh

现在我添加一个服务监听器,为每个请求触发:

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');

我想知道是否有其他方法可以访问侦听器中的参数 或者通过主机名选择语言的其他方式

感谢您的回答。

【问题讨论】:

    标签: symfony listener locale


    【解决方案1】:

    你快到了。您现在唯一要做的就是使用“参数”(构造函数的参数)将参数注入您的侦听器。 %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;
        }
    
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      相关资源
      最近更新 更多