2011-10-26 25 views
10

Soy nuevo en Symfony2 y estoy buscando elegir el idioma con el TLD de mi nombre de host. (de manera apropiada)Symfony2 Idioma para TLD

ya que encontrar alguna manera de cambiar el idioma con un formulario: http://symfony.com/blog/play-with-the-user-language

pero tengo que ser capaz de seleccionar el idioma cuando un nuevo usuario se conecte con:

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

Por ahora añadir un detector de servicios que desencadenan para cada solicitud:

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

con la clase:

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

Este detector funciona, pero me gustaría utilizar algunos parámetros para definir qué partido TLD con que el lenguaje, pero en el oyente no puedo tener acceso al contenedor de esa manera:

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

me gustaría saber si hay otra forma de acceso a los parámetros en un Oyente O de otra manera para seleccionar un idioma con el nombre de host

Gracias por su respuesta.

Respuesta

7

Ya casi está allí. Lo único que tienes que hacer ahora es inyectar los parámetros en tu oyente, usando "argumentos" (argumentos para el constructor). %foobar% se refiere al parámetro "foobar", @foobar se refiere al servicio "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 } 

Y el oyente:

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

    ... 
}