2011-10-26 12 views
10

私はSymfony2で新しく、私は自分のホスト名のTLDで言語を選択したいと考えています。 (適切な方法で)TLD用Symfony2言語

私はすでにフォームで言語を変更するには、いくつかの方法を見つける: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'); 

私がアクセスする別の方法があるかどうかを知りたいですリスナー内のパラメータへ またはホスト名で言語を選択する別の方法

ありがとうございます。

答えて

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

    ... 
}