2012-07-11 13 views
13

En el routing.yml puede hacer cosas como:¿Cómo redirigir con parámetros en routing.yml?

redirect_old_url_to_new: 
    pattern: /old-pattern 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: /new-pattern 
     permanent: true 

que redirigirá a la URL /old-pattern/new-pattern. Sin embargo, si tengo un parámetro, ¿cómo puede ser el parámetro traducida en la nueva ruta, por ejemplo .:

redirect_old_url_to_new: 
    pattern: /old-pattern/{page} 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: /new-pattern/{page} 
     permanent: true 

Esto no está funcionando y se redirigirá a /new-pattern/{page}, literalmente, y por lo tanto va a cambiarlo desde la /old-pattern/23 a /new-pattern/{page}.

Respuesta

16

Si el nombre del parámetro es idéntico, el parámetro se pasará automáticamente:

FirstRoute: 
    pattern: /firstroute/{page} 
    defaults: 
     _controller: Bundle:Controller:action 

# SecondRoute will redirect to FirstRoute. 
# ex: /secondroute/1 redirects to /firstroute/1    
SecondRoute: 
    pattern: /secondroute/{page} 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: FirstRoute 
     permanent: true 
+0

si la ruta de destino tiene menos parámetros que la ruta que se redirige, ¿seguirá funcionando? – DevZer0

+0

Funcionará, pero los parámetros adicionales terminan como parámetros de consulta en la url. – DavidLin

+1

@DavidLin: en Symfony 2.8 (también versiones anteriores), puede ignorar parámetros adicionales configurando la tecla 'ignoreAttributes' en' defaults'. Por ejemplo, 'ignoreAttributes: [name, age]' ignorará los parámetros extra 'name' y' age', por lo que no aparecerán en la URL. – conradkdotcom

4

parece que hay un error en el libro de Symfony

root: 
    pattern:/
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: /app 
     permanent: true 

Como dichos brazos, es "FrameworkBundle: Redirigir: redirigir "y no" FrameworkBundle: Redirigir: urlRedirect "

0

Puede redirigir la raíz en .yml como este:

root: 
    path: redirected_path 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: destination_path 
     permanent: true|false 

o

root: 
    path: redirected_path 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: destination_route_name 
     permanent: true|false 
1

que estaba equivocado antes, esto funciona para mí:

redirection: 
    path: /exercices.html 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: blog 
     slug: url-of-the-post 
     permanent: true 

pone directamente bajo parameter_name: parameter_valueroute.

Cuestiones relacionadas