web-dev-qa-db-fra.com

Symfony 2 redirige en utilisant POST

Dans Symfony 2, j'ai le code suivant dans mon contrôleur:

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

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

où route est:

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

Cela ne fonctionne pas car la redirection effectue une requête GET. J'ai aussi essayé ce modèle, mais il ne correspond pas à l'itinéraire:

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

J'ai trouvé la documentation de routage inutile. Existe-t-il un moyen de faire en sorte que la redirection fasse une demande POST? À quoi ressemblerait la route, et dois-je faire quelque chose dans le contrôleur pour que cela se produise?

12
ContextSwitch

Il est impossible de rediriger une demande POST car le navigateur devrait renvoyer les données POST (ce qui n'est pas le cas). Dans ce cas, vous devriez plutôt utiliser forwarding.

12
chiborg

La dernière façon de faire POST demande de redirection (à partir de Symfony 2.6 ) est simplement:

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

Le code 307 conserve la méthode de la requête, alors que redirectToRoute() est une méthode de raccourci.

32
Damaged Organic

J'ai eu la même erreur avec vous lorsque j'ai utilisé $this->generateUrl avec les paramètres passés. Cependant, ma redirection fonctionnait lorsque j'ai essayé ceci:

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

(Je sais que cela ne vous aiderait pas beaucoup en ce moment.)

1
Floricel