From bb77e9a3d680c531eb68324a371aab82f3ff9a32 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 13 May 2010 08:29:04 +0200 Subject: [PATCH] [WebBundle] re-organized the sub-request management a bit (WIP) --- .../Framework/WebBundle/Controller.php | 14 ++++++++- .../WebBundle/Helper/ActionsHelper.php | 31 +++++++++++++++---- .../WebBundle/Listener/ControllerLoader.php | 9 ------ 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/Symfony/Framework/WebBundle/Controller.php b/src/Symfony/Framework/WebBundle/Controller.php index 59695de92a..d972224d69 100644 --- a/src/Symfony/Framework/WebBundle/Controller.php +++ b/src/Symfony/Framework/WebBundle/Controller.php @@ -82,9 +82,21 @@ class Controller return $this->container->getRouterService()->generate($route, $parameters); } + /** + * Forwards the request to another controller. + * + * @param string $controller The controller name (a string like BlogBundle:Post:index) + * @param array $path An array of path parameters + * @param array $query An array of query parameters + * + * @return Response A Response instance + */ public function forward($controller, array $path = array(), array $query = array()) { - return $this->container->getControllerLoaderService()->run($controller, $path, $query); + $path['_controller'] = $controller; + $subRequest = $this->getRequest()->duplicate($query, null, $path); + + return $this->container->getKernelService()->handle($subRequest, false, true); } /** diff --git a/src/Symfony/Framework/WebBundle/Helper/ActionsHelper.php b/src/Symfony/Framework/WebBundle/Helper/ActionsHelper.php index d4ad0743a0..b4c8e6310a 100644 --- a/src/Symfony/Framework/WebBundle/Helper/ActionsHelper.php +++ b/src/Symfony/Framework/WebBundle/Helper/ActionsHelper.php @@ -36,14 +36,33 @@ class ActionsHelper extends Helper $this->container = $container; } - public function output($controller, array $parameters = array()) - { - echo $this->render($controller, $parameters); - } + /** + * Outputs the Response content for a given controller. + * + * @param string $controller A controller name to execute (a string like BlogBundle:Post:index) + * @param array $path An array of path parameters + * @param array $query An array of query parameters + * + * @see render() + */ + public function output($controller, array $path = array(), array $query = array()) + { + echo $this->render($controller, $path, $query); + } - public function render($controller, array $parameters = array()) + /** + * Returns the Response content for a given controller. + * + * @param string $controller A controller name to execute (a string like BlogBundle:Post:index) + * @param array $path An array of path parameters + * @param array $query An array of query parameters + */ + public function render($controller, array $path = array(), array $query = array()) { - return $this->container->getControllerLoaderService()->run($controller, Escaper::unescape($parameters))->getContent(); + $path['_controller'] = $controller; + $subRequest = $this->container->getRequestService()->duplicate($query, null, Escaper::unescape($path)); + + return $this->container->getKernelService()->handle($subRequest, false, true); } /** diff --git a/src/Symfony/Framework/WebBundle/Listener/ControllerLoader.php b/src/Symfony/Framework/WebBundle/Listener/ControllerLoader.php index ff1025c34e..68ad5bf4e4 100644 --- a/src/Symfony/Framework/WebBundle/Listener/ControllerLoader.php +++ b/src/Symfony/Framework/WebBundle/Listener/ControllerLoader.php @@ -39,15 +39,6 @@ class ControllerLoader $this->container->getEventDispatcherService()->connect('core.load_controller', array($this, 'resolve')); } - public function run($controller, array $path = array(), array $query = array()) - { - $path['_controller'] = $controller; - - $subRequest = $this->container->getRequestService()->duplicate($query, null, $path); - - return $this->container->getKernelService()->handle($subRequest, false, true); - } - public function resolve(Event $event) { $request = $event->getParameter('request');