2012-06-27 6 views
8

In Symfony 2 ho il seguente codice nel mio Controller:Symfony 2 reindirizzamento usando POST

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

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

dove percorso è:

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

Questo non funziona in quanto il reindirizzamento sta facendo un GET richiesta. Ho provato anche questo modello, ma la sua non corrispondenti al percorso:

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

ho trovato la documentazione di routing inutile. C'è un modo in cui posso avere il reindirizzamento per fare una richiesta POST? Come sarebbe la rotta e devo fare qualcosa nel controller per farlo accadere?

+0

possibile duplicato http://stackoverflow.com/q/5576619/569101 – j0k

risposta

11

E 'impossibile reindirizzare una richiesta POST perché il browser avrebbe dovuto re-inviare i dati POST (che non è così). Quello che dovresti fare invece in questo caso è usare forwarding.

+11

Questo non è proprio vero. Codice di stato definito HTTP/1.1 307 che richiede al browser di non modificare il metodo di richiesta. – gphilip

+0

Penso questa risposta non è corretto più - vedi https://stackoverflow.com/a/31031986/261332 di seguito. – userfuser

1

Ho avuto lo stesso errore con te quando ho usato $this->generateUrl con parametri passati. Tuttavia, il mio reindirizzamento funzionato quando ho provato questo:

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

(. So che non ti avrebbe aiutato più di tanto in questo momento)

+0

Non vedo la differenza! In entrambi i modi, param1 sta arrivando come parametro GET nell'URL. –

23

recente modo di fare richiesta POST di reindirizzamento (a partire da Symfony 2.6) è semplicemente:

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

Codice 307 conserva il metodo di richiesta, mentre redirectToRoute() è un metodo di scelta rapida.

+0

Grande! Esattamente quello che ha funzionato anche per me. (Symfony 3.1.4) – Ren

+0

Fantastico! Oh, perché non lo sapevo un paio di anni fa ... – userfuser