2011-10-26 20 views
10

Symfony2 'de yeni durumdayım ve ana bilgisayar isminin TLD'si ile dili seçmeyi arıyorum.Symfony2 Dil TLD

    : Zaten bir form ile dilini değiştirmek için bir yol bulmak

    (uygun şekilde) : Yeni bir kullanıcı ile bağlandığınızda http://symfony.com/blog/play-with-the-user-language

    Ama dili seçmek için gerekiyor

  • www.hostname.fr => fr
  • www.hostname.it => o
  • www.hostname.co.uk =>
tr sınıf ile

services: 
    kernel.listener.domain_langue_listener: 
     class: acme\DemoBundle\Listener\DomainLangueListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } 

: Şimdilik

ben her istek için tetiklemek bir hizmet dinleyici eklemek

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

Bu Dinleyici çalışır ama birlikte hangi TLD maçı tanımlamak için bazı Parametreleri kullanmak istiyorum hangi Dil, Ama İşleyici içinde böyle kaba erişemez: erişmek için başka bir yolu varsa

$this->container->getParameter('tld_allowed'); 

Ben öğrenmek istiyorum Listesindeki Parametrelere ya da ana makine adıyla bir dil seçmenin başka bir yolu

Yanıtlarınız için teşekkür ederiz.

cevap

7

Neredeyse ordasın. Şimdi yapmanız gereken tek şey, parametreleri "argümanlar" (yapıcı için argümanlar) kullanarak dinleyicinize enjekte etmektir. %foobar% "foobar" parametresine, @foobar "foobar" servisine atıfta bulunur.

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 } 

Ve dinleyici:

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

    ... 
}