web-dev-qa-db-ja.com

POSTを使用したsymfony 2リダイレクト

Symfony 2では、コントローラーに次のコードがあります。

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

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

ルートは次のとおりです。

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

リダイレクトがGETリクエストを行っているため、これは機能しません。私もこのパターンを試しましたが、ルートと一致しません:

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

ルーティングのドキュメントが役に立たないことがわかりました。リダイレクトにPOSTリクエストを送信させる方法はありますか?ルートはどのように見えますか?それを実現するためにコントローラで何かを行う必要がありますか?

12
ContextSwitch

POSTリクエストをリダイレクトすることは不可能です。ブラウザはPOSTデータを再送信しなければならないためです。そうではありません。)代わりに何をすべきかこの場合は forwarding。 を使用します

12
chiborg

POSTリクエストのリダイレクト(Symfony 2.6以降)の最新の方法は単純です:

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

コード_307_はリクエストメソッドを保持しますが、redirectToRoute()はショートカットメソッドです。

34
Damaged Organic

渡されたパラメーターで$this->generateUrlを使用したときも、同じエラーが発生しました。しかし、私がこれを試したとき、私のリダイレクトは機能しました:

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

(私はそれが今あなたにそれほど役に立たないことを知っています。)

1
Floricel