17

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リクエストを行わせる方法はありますか?ルートはどのようになりますか?それを実現するには、コントローラーで何かを行う必要がありますか?

4

3 に答える 3

42

POST リクエストのリダイレクトを行う最新の方法 ( Symfony 2.6の時点) は単純です:

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

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

于 2015-06-24T16:26:31.930 に答える
13

ブラウザは POST データを再送信する必要があるため (そうではありません)、POST 要求をリダイレクトすることはできません。この場合、代わりにすべきことは、転送を使用することです。

于 2012-06-27T14:07:37.007 に答える
1

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

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

(今はそれほど役に立たないことはわかっています。)

于 2012-07-21T18:00:51.657 に答える