1515use Symfony \Component \HttpFoundation \RequestStack ;
1616use Symfony \Component \HttpKernel \Controller \ArgumentResolverInterface ;
1717use Symfony \Component \HttpKernel \Controller \ControllerResolverInterface ;
18+ use Symfony \Component \HttpKernel \Event \FilterControllerArgumentsEvent ;
1819use Symfony \Component \HttpKernel \HttpKernel ;
1920use Symfony \Component \HttpKernel \HttpKernelInterface ;
2021use Symfony \Component \HttpKernel \KernelEvents ;
@@ -233,6 +234,42 @@ public function testHandleWithAResponseListener()
233234 $ this ->assertEquals ('foo ' , $ kernel ->handle (new Request ())->getContent ());
234235 }
235236
237+ public function testHandleAllowChangingControllerArguments ()
238+ {
239+ $ dispatcher = new EventDispatcher ();
240+ $ dispatcher ->addListener (KernelEvents::CONTROLLER_ARGUMENTS , function (FilterControllerArgumentsEvent $ event ) {
241+ $ event ->setArguments (array ('foo ' ));
242+ });
243+
244+ $ kernel = $ this ->getHttpKernel ($ dispatcher , function ($ content ) { return new Response ($ content ); });
245+
246+ $ this ->assertResponseEquals (new Response ('foo ' ), $ kernel ->handle (new Request ()));
247+ }
248+
249+ public function testHandleAllowChangingControllerAndArguments ()
250+ {
251+ $ dispatcher = new EventDispatcher ();
252+ $ dispatcher ->addListener (KernelEvents::CONTROLLER_ARGUMENTS , function (FilterControllerArgumentsEvent $ event ) {
253+ $ oldController = $ event ->getController ();
254+ $ oldArguments = $ event ->getArguments ();
255+
256+ $ newController = function ($ id ) use ($ oldController , $ oldArguments ) {
257+ $ response = call_user_func_array ($ oldController , $ oldArguments );
258+
259+ $ response ->headers ->set ('X-Id ' , $ id );
260+
261+ return $ response ;
262+ };
263+
264+ $ event ->setController ($ newController );
265+ $ event ->setArguments (array ('bar ' ));
266+ });
267+
268+ $ kernel = $ this ->getHttpKernel ($ dispatcher , function ($ content ) { return new Response ($ content ); }, null , array ('foo ' ));
269+
270+ $ this ->assertResponseEquals (new Response ('foo ' , 200 , array ('X-Id ' => 'bar ' )), $ kernel ->handle (new Request ()));
271+ }
272+
236273 public function testTerminate ()
237274 {
238275 $ dispatcher = new EventDispatcher ();
@@ -265,7 +302,7 @@ public function testVerifyRequestStackPushPopDuringHandle()
265302 $ kernel ->handle ($ request , HttpKernelInterface::MASTER_REQUEST );
266303 }
267304
268- private function getHttpKernel (EventDispatcherInterface $ eventDispatcher , $ controller = null , RequestStack $ requestStack = null )
305+ private function getHttpKernel (EventDispatcherInterface $ eventDispatcher , $ controller = null , RequestStack $ requestStack = null , array $ arguments = array () )
269306 {
270307 if (null === $ controller ) {
271308 $ controller = function () { return new Response ('Hello ' ); };
@@ -281,7 +318,7 @@ private function getHttpKernel(EventDispatcherInterface $eventDispatcher, $contr
281318 $ argumentResolver
282319 ->expects ($ this ->any ())
283320 ->method ('getArguments ' )
284- ->will ($ this ->returnValue (array () ));
321+ ->will ($ this ->returnValue ($ arguments ));
285322
286323 return new HttpKernel ($ eventDispatcher , $ controllerResolver , $ requestStack , $ argumentResolver );
287324 }
0 commit comments