Browse Source

Splat operator doesn't like associative arrays.

Fixes #10286
ADmad 9 years ago
parent
commit
97cbe2311a
2 changed files with 24 additions and 1 deletions
  1. 1 1
      src/Controller/Controller.php
  2. 23 0
      tests/TestCase/Controller/ControllerTest.php

+ 1 - 1
src/Controller/Controller.php

@@ -437,7 +437,7 @@ class Controller implements EventListenerInterface, EventDispatcherInterface
         /* @var callable $callable */
         $callable = [$this, $request->getParam('action')];
 
-        return $callable(...$request->getParam('pass'));
+        return $callable(...array_values($request->getParam('pass')));
     }
 
     /**

+ 23 - 0
tests/TestCase/Controller/ControllerTest.php

@@ -873,6 +873,29 @@ class ControllerTest extends TestCase
     }
 
     /**
+     * test invoking controller methods with passed params
+     *
+     * @return void
+     */
+    public function testInvokeActionWithPassedParams()
+    {
+        $url = new Request('test/index/1/2');
+        $url->addParams([
+            'controller' => 'Test',
+            'action' => 'index',
+            'pass' => ['param1' => '1', 'param2' => '2']
+        ]);
+        $response = $this->getMockBuilder('Cake\Network\Response')->getMock();
+
+        $Controller = new TestController($url, $response);
+        $result = $Controller->invokeAction();
+        $this->assertEquals(
+            ['testId' => '1', 'test2Id' => '2'],
+            $Controller->request->data
+        );
+    }
+
+    /**
      * test that a classes namespace is used in the viewPath.
      *
      * @return void