Solicitud de reenvío de Symfony 2 que pasa junto con los parámetros GET / POST

¿Es posible reenviar una solicitud, transmitiendo todos los parámetros GET / POST?

Creo que si lo hago

$this->forward('dest') 

Iré a dest sin ningún parámetro GET / POST?

ACTUALIZAR

Mi objective es tener una acción de controlador como addSomething que tome controles para que el usuario tenga suficientes “elementos” para agregar algo. A continuación, reenvíe la solicitud al controlador apropiado para continuar la adición real de agregar {Tipo} Algo

¿O recibiría un servicio de “control” en todos los controladores que haga que la verificación sea más apropiada? De todos modos, creo que es informativo saber cómo reenviar a una acción de controlador con todos los params

No veo ningún motivo aquí para reenviar la solicitud a través del kernel. Puede seguir la ruta de encapsular esta lógica en un servicio de comprobación, como ha sugerido, o puede crear un escucha kernel.request que se ejecuta después del escucha de enrutador y aplica el atributo _controller solo si se cumplen sus condiciones.

Por ejemplo, este routing.yml :

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

Y este oyente:

 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'); } } } 

Configurado para ejecutarse después del oyente del enrutador principal:

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

La prioridad del escucha del enrutador principal es 0 en Symfony 2.0 y 32 en Symfony 2.1. En cualquier caso, una prioridad de -10 debería funcionar.

Tengo curiosidad por ver si esto funciona 🙂

La solución más fácil (y una que probablemente probaría) sería pasar la clase de solicitud como parámetro de reenvío

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

Y en la acción reenviada solo úsala como parámetro del método:

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

Todos los parámetros POST se envían automáticamente. No se necesita ninguna acción para tener POST param en el controlador objective. Pero tiene que pasar explícitamente parámetros de búsqueda (GET) y parámetros de ruta. El método forward toma 2 parámetros opcionales que representan respectivamente las matrices pathParam y queryParam. Puede pasar todo el parámetro de consulta de la solicitud actual

 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); } 

El reenvío de “atributos de solicitud” como “ruta” funciona para mí:

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

$ path [‘_ controller’] se sobrescribirá en el método forward ()