2012-09-12 16 views
7

He estado buscando en Google esta pregunta pero no puedo encontrar a nadie con mi mismo problema ... Y no creo que sea el único aquí>. <Agregando atributos a la solicitud de ruta con ramita en symfony2

Veamos, estoy usando traducciones en symfony2. NECESITO usar twig para esto ... Lo que pasa es que necesito 3 enlaces para que la gente pueda cambiar el idioma del sitio. El enlace tiene que redirigir a la misma página que el usuario, pero cambiando el '_locale'.

pensé por primera vez en algo como esto:

// in routing.yml 
bundleStuff_someUrl: 
    pattern: /{_locale}/aloha 
    defaults: { _controller: bundleStuff:Aloha:foo } 

bundleStuff_fooUrl: 
    pattern: /{_locale}/foo/{fooParam} 
    defaults: { _controller: bundleStuff:Foo:foo } 

// in view.html.twig 
<a href="{{ path((app.request.get('_route'), { '_locale': 'l1' }) }}">lang1</a> 
<a href="{{ path((app.request.get('_route'), { '_locale': 'l2' }) }}">lang2</a> 
<a href="{{ path((app.request.get('_route'), { '_locale': 'l3' }) }}">lang3</a> 

El problema se convierte en cuando (en este caso) el _route es fooUrl ... ¿Hay alguna forma de añadir todos los atributos que tengo en la vista actual el camino que estoy buscando? En otras palabras, refiriéndose a este ejemplo: ¿hay alguna manera para que Twig sepa que tiene que agregar el 'fooParam' a la ruta si la vista actual es 'fooUrl'?

¡Gracias de antemano! Espero que esta publicación sea útil. : D

Respuesta

12

_route_params El atributo de solicitud contiene los parámetros de la ruta actual. Así que el código de la ramita sería

{% set route = app.request.get('_route') %} 
{% set route_params = app.request.get('_route_params') %} 

<a href="{{ path(route, route_params | merge({ '_locale': 'l1' })) }}">lang1</a> 
<a href="{{ path(route, route_params | merge({ '_locale': 'l2' })) }}">lang2</a> 
<a href="{{ path(route, route_params | merge({ '_locale': 'l3' })) }}">lang3</a> 
+1

Observe que este atributo _route_params solo está disponible en Symfony 2.1. Si usa 2.0, puede usar una extensión twig personalizada como se describe aquí: http://htmlpurifier.org/docs/enduser-utf8.html –

+0

Lo siento, URL incorrecta. El correcto es http://stackoverflow.com/questions/9378714/get-current-url-in-twig-template –

+0

Uo! ¡Gracias a los dos! : D Lo intentaré en casa y le diré qué. ¡Muchas gracias! – ThisIsErico

2

Para Symfony 2.0 puede obtener la variable _locale en el controlador y luego enviar una variable.

Por ejemplo

controlador:

$language = $this->getRequest()->get('_locale'); 
    $this->$this->redirect($this->generateUrl('bundleStuff_someUrl', array('language' => $language))) 

y un después en routing.yml

bundleStuff_someUrl: Modelo :/{idioma}/aloha valores predeterminados: {_controller: bundleStuff: Aloha: foo}

Cuestiones relacionadas