From d367c8a6c04c08e067309397bcc47003f7ed6bd8 Mon Sep 17 00:00:00 2001 From: mark_story Date: Fri, 9 May 2014 22:27:44 -0400 Subject: [PATCH] Remove additionalParams and update RequestActionTrait tests. The additionalParams parameter isn't very useful as it simply gets merged into the request later on. We can easily do that earlier in the process now. Fix incorrectlty dispatched array based requestAction() calls. They were going back through Router::parse() when they did not need to. --- src/Routing/Dispatcher.php | 4 ++-- src/Routing/RequestActionTrait.php | 21 ++++++++++++------- .../Routing/RequestActionTraitTest.php | 12 +++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/Routing/Dispatcher.php b/src/Routing/Dispatcher.php index 2cd6ab99a67..bc19c6e30bc 100644 --- a/src/Routing/Dispatcher.php +++ b/src/Routing/Dispatcher.php @@ -94,8 +94,8 @@ public function getEventManager() { * @return string|void if `$request['return']` is set then it returns response body, null otherwise * @throws \Cake\Controller\Error\MissingControllerException When the controller is missing. */ - public function dispatch(Request $request, Response $response, array $additionalParams = array()) { - $beforeEvent = new Event('Dispatcher.beforeDispatch', $this, compact('request', 'response', 'additionalParams')); + public function dispatch(Request $request, Response $response) { + $beforeEvent = new Event('Dispatcher.beforeDispatch', $this, compact('request', 'response')); $this->getEventManager()->dispatch($beforeEvent); $request = $beforeEvent->data['request']; diff --git a/src/Routing/RequestActionTrait.php b/src/Routing/RequestActionTrait.php index af786afd35d..77a679c6e22 100644 --- a/src/Routing/RequestActionTrait.php +++ b/src/Routing/RequestActionTrait.php @@ -16,7 +16,7 @@ use Cake\Core\Configure; use Cake\Network\Request; use Cake\Network\Response; -use Cake\Routing\Dispatcher; +use Cake\Routing\DispatcherFactory; use Cake\Routing\Router; /** @@ -95,19 +95,23 @@ public function requestAction($url, array $extra = array()) { } unset($extra['post'], $extra['query']); - if (is_string($url) && strpos($url, Configure::read('App.fullBaseUrl')) === 0) { - $url = Router::normalize(str_replace(Configure::read('App.fullBaseUrl'), '', $url)); + $baseUrl = Configure::read('App.fullBaseUrl'); + if (is_string($url) && strpos($url, $baseUrl) === 0) { + $url = Router::normalize(str_replace($baseUrl, '', $url)); } if (is_string($url)) { $params = [ 'url' => $url ]; } elseif (is_array($url)) { - $params = array_merge($url, [ - 'pass' => [], + $params = [ + 'params' => $url, 'base' => false, 'url' => Router::reverse($url) - ]); + ]; + if (empty($params['params']['pass'])) { + $params['params']['pass'] = []; + } } if (!empty($post)) { $params['post'] = $post; @@ -116,8 +120,9 @@ public function requestAction($url, array $extra = array()) { $params['query'] = $query; } $request = new Request($params); - $dispatcher = new Dispatcher(); - $result = $dispatcher->dispatch($request, new Response(), $extra); + $request->addParams($extra); + $dispatcher = DispatcherFactory::create(); + $result = $dispatcher->dispatch($request, new Response()); Router::popRequest(); return $result; } diff --git a/tests/TestCase/Routing/RequestActionTraitTest.php b/tests/TestCase/Routing/RequestActionTraitTest.php index 7c8b7008703..2f337e3359e 100644 --- a/tests/TestCase/Routing/RequestActionTraitTest.php +++ b/tests/TestCase/Routing/RequestActionTraitTest.php @@ -16,6 +16,7 @@ use Cake\Core\App; use Cake\Core\Configure; use Cake\Core\Plugin; +use Cake\Routing\DispatcherFactory; use Cake\Routing\RequestActionTrait; use Cake\Routing\Router; use Cake\TestSuite\TestCase; @@ -40,9 +41,20 @@ public function setUp() { parent::setUp(); Configure::write('App.namespace', 'TestApp'); Configure::write('Security.salt', 'not-the-default'); + DispatcherFactory::add('RoutingFilter'); $this->object = $this->getObjectForTrait('Cake\Routing\RequestActionTrait'); } +/** + * teardown + * + * @return void + */ + public function tearDown() { + parent::tearDown(); + DispatcherFactory::clear(); + } + /** * testRequestAction method *