Browse Source

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.
mark_story 12 years ago
parent
commit
d367c8a6c0

+ 2 - 2
src/Routing/Dispatcher.php

@@ -94,8 +94,8 @@ class Dispatcher {
  * @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'];

+ 13 - 8
src/Routing/RequestActionTrait.php

@@ -16,7 +16,7 @@ namespace Cake\Routing;
 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 @@ trait RequestActionTrait {
 		}
 		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 @@ trait RequestActionTrait {
 			$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;
 	}

+ 12 - 0
tests/TestCase/Routing/RequestActionTraitTest.php

@@ -16,6 +16,7 @@ namespace Cake\Test\TestCase\Routing;
 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,10 +41,21 @@ class RequestActionTraitTest extends TestCase {
 		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
  *
  * @return void