2009-09-30 17 views
29

¿cómo puedo redireccionar a otra acción pasando 2 o más parámetros? este código:symfony redirigir con 2 parámetros

$this->redirect('input/new?year=' . $year . '&month=' . $month); 

resultados en la URL:

http://.../input?year=2009&month=9

Respuesta

53

Bueno, eso es normal, redirige a una URL absoluta. Se puede hacer que:

$this->redirect($this->generateUrl('default', array('module' => 'input', 
'action' => 'new', 'year' => $year, 'month' => $month))); 
+1

que ayudó. a excepción de que genera una URL como "http: //.../input/new/year/2009/month/10" – kipelovets

+3

Si tiene una ruta definida, puede reemplazar 'default' por su nombre, y cambiar el segundo parámetro con los parámetros de las rutas, si es necesario. – xarch

+4

Si tiene una ruta definida, puede usar '$ this-> redirectToRoute ('routename', ['param1' => 'value', ['param2' => 'value'])' – chteuchteu

3

creo que esto no es un comportamiento normal de Symfony. ¿Has definido algunas reglas de enrutamiento?

¿Usted también ha intentado esto:

$this->redirect('module/action?'.http_build_query($paramsArray)); 
+0

no, eso no ayuda – kipelovets

1

cosa extraña. ¿Tiene

$this->redirect('@default?module=input&action=new&year=' . $year . '&month=' . $month); 

¿le conviene?

+2

sí, eso también funciona. gracias, pero la solución de xarch es más bonita =) – kipelovets

-3
$this->redirect('input/new/year/' . $year . '/month/' . $month); 
+3

esto socava la interna sistema de enrutamiento de symfony – jochil

+1

en realidad no es así. El motor de enrutamiento interno inteligente de Symfony es exactamente el motivo por el que funciona esta redirección. pero gracias por el voto negativo;) – Mohammad

+5

cuando lo haces de esta manera tienes que cambiar todos los enlaces/redireccionamientos al ajustar la regla de enrutamiento correspondiente – jochil

4

También puede utilizar redirección, que especifica el nombre de la ruta y la matriz de parámetros:

$this->redirect('route_name', array('year' => $year, 'month' => $month)); 

(Probado en Symfony 1.4)

2

En soportado actualmente Versiones de Symfony (2.7+) it's even easier:

return $this->redirectToRoute('default', array('year' => $year, 'month' => $month));