2012-07-11 8 views
13

W routing.yml można robić takie rzeczy jak:Jak przekierować z parametrami w routing.yml?

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

który odsyła do adresu URL /old-pattern/new-pattern. Jednak jeśli mam parametr, jaki może być tłumaczone parametr w nowej ścieżce, np .:

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

to nie działa i przekierowanie do /new-pattern/{page} dosłownie i dlatego przekierowanie z /old-pattern/23 do /new-pattern/{page}.

Odpowiedz

16

Jeśli nazwa parametru jest identyczny, to parametr zostanie przekazana automatycznie:

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

jeśli trasa docelowa ma mniej parametrów niż przekierowana trasa, czy nadal będzie działać? – DevZer0

+0

To zadziała, ale dodatkowe parametry staną się parametrami zapytania do adresu URL. – DavidLin

+1

@DavidLin: W Symfony 2.8 (może i poprzednie wersje) można zignorować dodatkowe parametry, ustawiając 'ignoreAttributes' w' defaults'. Na przykład, 'ignoreAttributes: [nazwa, wiek]' zignoruje dodatkowe parametry 'name' i' age', więc nie pojawią się w adresie URL. – conradkdotcom

4

Wydaje się, że jest to błąd w Symfony Księdze

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

Jak powiedział Arms, to „FrameworkBundle: Przekierowanie: przekieruj ", a nie" FrameworkBundle: Przekierowanie: urlRedirect "

0

Możesz przekierować root w .yml w ten sposób:

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

lub

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

myliłem się wcześniej, to działa na mnie:

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

Put bezpośrednio parameter_name: parameter_value pod route.