В 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? Как бы выглядел маршрут, и нужно ли мне что-либо делать в контроллере, чтобы это произошло?
Невозможно перенаправить запрос POST, потому что браузеру придется повторно отправить данные POST (а это не так). Вместо этого вы должны использовать переадресацию.
Последний способ перенаправления запроса POST (с Symfony 2.6 ) – это просто:
return $this->redirectToRoute('route', [ 'request' => $request ], 307);
Код 307
сохраняет метод запроса, а redirectToRoute()
– метод быстрого доступа.
У меня была такая же ошибка с вами, когда я использовал $this->generateUrl
с переданными параметрами. Однако мое перенаправление работало, когда я пробовал это:
$this->get('router')->generate('route_name', array('param1' => 'paramVal'))
(Я знаю, что это не поможет вам сейчас.)