2012-06-27 14 views
8

En Symfony 2 Tengo el siguiente código en mi controlador:Symfony 2 redirección usando la POST

// prepare to render the seller info panel 
$response = array(
    'data' => $data, 
); 

// render the seller info panel 
return $this->redirect($this->generateUrl('route', $response)); 

donde ruta es:

route: 
    pattern: /listing/complete/{data} 
    defaults: { _controller: FooBundle:Foo:action } 
    requirements: 
     _method: POST 

Esto no funciona ya que la redirección está haciendo un GET solicitud. También he intentado que este patrón, pero no coincide con la ruta:

route: 
    pattern: /listing/complete 
    defaults: { _controller: FooBundle:Foo:action } 
    requirements: 
     _method: POST 

que he encontrado la documentación de enrutamiento inútil. ¿Hay alguna manera de que pueda hacer que la redirección haga una solicitud POST? ¿Cómo se vería la ruta, y tengo que hacer algo en el controlador para que esto ocurra?

+0

posible duplicado http://stackoverflow.com/q/5576619/569101 – j0k

Respuesta

11

Es imposible redirigir una solicitud POST porque el navegador tendría que volver a enviar los datos POST (que no). Lo que debe hacer en su lugar en este caso es usar forwarding.

+11

Esto no es realmente cierto. Código de estado definido HTTP/1.1 307 que requiere que el navegador no cambie el método de solicitud. – gphilip

+0

Creo que esta respuesta ya no es correcta; consulte https://stackoverflow.com/a/31031986/261332 a continuación. – userfuser

1

Tuve el mismo error cuando usé $this->generateUrl con parámetros pasados. Sin embargo, mi redirección funcionaba cuando he intentado esto:

$this->get('router')->generate('route_name', array('param1' => 'paramVal')) 

(. Sé que no le ayudaría mucho en este momento)

+0

¡No veo la diferencia! En ambos sentidos, param1 está llegando al parámetro GET en la URL. –

23

reciente forma de hacer solicitud POST redirección (a partir de Symfony 2.6) es simplemente:

return $this->redirectToRoute('route', [ 
    'request' => $request 
], 307); 

Código 307 conserva el método de la petición, mientras que redirectToRoute() es un método de acceso directo.

+0

¡Genial! Exactamente lo que funcionó para mí también. (Symfony 3.1.4) – Ren

+0

¡Fantástico! Oh, por qué no lo sabía hace un par de años ... – userfuser