Symfony 2 Forward Request, проходящий по параметрам GET / POST

Можно ли отправить запрос, пройдя все параметры GET / POST?

Я думаю, если я просто сделаю

$this->forward('dest') 

Я поеду в dest без каких-либо параметров GET / POST?

ОБНОВИТЬ

Моя цель состоит в том, чтобы иметь действие контроллера, такое как addSomething которое принимает проверки, что у пользователя есть достаточные «элементы», чтобы что-то добавить. Затем переадресуйте запрос на контроллер-ассистент, чтобы продолжить фактическое добавление добавления {Type} Something

Или вы получите «проверку» службы во всех контроллерах, что делает проверку более подходящей? В любом случае, я думаю, что он информативен, чтобы знать, как перенаправить действие контроллера со всеми параметрами

Я не вижу здесь никакой причины пересылать запрос обратно через ядро. Вы можете пойти по пути инкапсуляции этой логики в службу проверки, как вы предложили, или вы можете создать слушатель kernel.request который запускается после прослушивателя маршрутизатора и применяет атрибут _controller только если ваши условия выполнены.

Например, это routing.yml :

 some_route: pattern: /xyz defaults: { _controller_candidate: "FooBundle:Bar:baz" } 

И этот слушатель:

 class MyListener { public function onKernelRequest($event) { $request = $event->getRequest(); if (!$controller = $request->attributes->get('_controller_candidiate')) { return; } if (/* your logic... */) { $request->attributes->set('_controller', $controller'); } } } 

Настроен для запуска после прослушивания основного маршрутизатора:

 services: my_listener: class: MyListener tags: - name: kernel.event_listener event: kernel.request priority: -10 

Приоритет основного слушателя маршрутизатора равен 0 в Symfony 2.0 и 32 в Symfony 2.1. В любом случае приоритет -10 должен работать.

Мне интересно узнать, работает ли это 🙂

Самое простое решение (и, возможно, я бы предпочел бы) – просто передать класс Request в качестве параметра forward

 public function indexAction() { $request = $this->getRequest(); return $this->forward('AcmeBundle:Forward:new', array('request' => $request)); } 

И в перенаправленном действии просто используйте его как метод param:

 public function testAction($request) { var_dump($request);exit; } 

Все параметры POST автоматически перенаправляются. Не требуется никаких действий для установки параметра POST в целевом контроллере. Но вы должны явно передать параметры запроса (GET) и параметры пути. Метод forward принимает два параметра optionals, представляющие соответственно массивы pathParam и queryParam. Вы можете просто передать весь параметр запроса из текущего запроса

 public testAction(Request $request){ $pathParam = array(); //Specified path param if you have some $queryParam = $request->query->all(); $response = $this->forward("AcmeBundle:Forward:new", $pathParam, $queryParam); } 

Для меня работает пересылка «атрибутов запроса» как «путь»:

 public function indexAction() { $path = $this->getRequest()->attributes->all(); return $this->forward('CompMyBundle:MyController:MyAction', $path); } 

$ path ['_ controller'] будет перезаписан в методе forward ()!