2011-10-26 2 views
10

저는 Symfony2에서 새로 왔으며 내 호스트 이름의 TLD로 언어를 선택하려고합니다.TLF 용 symfony2 언어

    : 나는 이미 양식 언어를 변경 할 수있는 방법 찾을

    (적절한 방법으로) : 새로운 사용자와 연결할 때 http://symfony.com/blog/play-with-the-user-language

    을하지만 나는 언어를 선택 할 수 있어야합니다

  • www.hostname.fr => FR
  • www.hostname.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'); 

다른 방법으로 액세스 할 수 있는지 알고 싶습니다. 리스너의 매개 변수로 변환 또는 호스트 이름으로 언어를 선택하는 다른 방법

답장을 보내 주셔서 감사합니다.

답변

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

    ... 
}