2011-10-26 20 views
10

Sono nuovo in Symfony2 e sto cercando di scegliere la lingua con il TLD del mio nome host. (in modo corretto)Symfony2 Language per TLD

ho già trovare un modo per cambiare la lingua con un modulo: http://symfony.com/blog/play-with-the-user-language

ma ho bisogno di essere in grado di selezionare la lingua quando un nuovo utente si collega con:

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

Per ora aggiungo un listener del servizio che si innescano per ogni richiesta:

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

Con la classe:

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

questo listener funziona, ma vorrei utilizzare alcuni parametri per definire quali corrispondenza TLD con che lingua, ma in chi ascolta non posso accedere al contenitore così:

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

Vorrei sapere se c'è un altro modo per accedere ai parametri in un listener o un altro modo per selezionare una lingua con il nome host

Grazie per le vostre risposte.

risposta

7

Sei quasi arrivato. L'unica cosa che devi fare ora è iniettare i parametri nel listener, usando "argomenti" (argomenti per il costruttore). %foobar% si riferisce al parametro "foobar", @foobar si riferisce al servizio "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 } 

E l'ascoltatore:

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

    ... 
}