2012-07-11 11 views
13

Nella routing.yml si possono fare cose come:Come reindirizzare con i parametri in routing.yml?

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

Quale sarà reindirizzare l'URL /old-pattern a /new-pattern. Tuttavia, se ho un parametro, come può essere il parametro tradotto nel nuovo percorso, es .:

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

questo non sta funzionando e reindirizza a /new-pattern/{page} letteralmente e pertanto direzionare da /old-pattern/23 a /new-pattern/{page}.

risposta

16

Se il nome del parametro è identico, il parametro verrà passato automaticamente:

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

se il percorso di destinazione ha meno parametri rispetto al percorso che viene reindirizzato, funzionerebbe ancora? – DevZer0

+0

Funzionerà ma i parametri aggiuntivi finiscono come parametri di query nell'URL. – DavidLin

+1

@DavidLin: In Symfony 2.8 (forse anche nelle versioni precedenti), puoi ignorare parametri extra impostando la chiave 'ignoreAttributes' in' defaults'. Ad esempio, "ignoreAttributes: [name, age]" ignorerà i parametri extra 'name' e' age', quindi non appariranno nell'URL. – conradkdotcom

4

Sembra che ci sia un errore di Symfony Prenota

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

Come Arms ha detto, è "FrameworkBundle: Reindirizzamento: "redirect" e non "FrameworkBundle: Redirect: urlRedirect"

0

È possibile reindirizzare la radice in .yml come questo:

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

mi sbagliavo in precedenza, questo funziona per me:

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

messi direttamente parameter_name: parameter_value sotto route.

Problemi correlati