ソースを参照

Merge pull request #6411 from cakephp/3.0-refactor-controller

3.0 refactor controller
Mark Story 11 年 前
コミット
89b0a2f874

+ 20 - 22
src/Controller/Controller.php

@@ -250,37 +250,23 @@ class Controller implements EventListenerInterface
      */
     public function __construct(Request $request = null, Response $response = null, $name = null, $eventManager = null)
     {
-        if ($this->name === null && $name === null) {
-            list(, $name) = namespaceSplit(get_class($this));
-            $name = substr($name, 0, -10);
-        }
         if ($name !== null) {
             $this->name = $name;
         }
 
-        if (!$this->viewPath) {
-            $viewPath = $this->name;
-            if (isset($request->params['prefix'])) {
-                $prefixes = array_map(
-                    'Cake\Utility\Inflector::camelize',
-                    explode('/', $request->params['prefix'])
-                );
-                $viewPath = implode(DS, $prefixes) . DS . $viewPath;
-            }
-            $this->viewPath = $viewPath;
+        if ($this->name === null && isset($request->params['controller'])) {
+            $this->name = $request->params['controller'];
         }
 
-        if (!($request instanceof Request)) {
-            $request = new Request();
+        if ($this->name === null) {
+            list(, $name) = namespaceSplit(get_class($this));
+            $this->name = substr($name, 0, -10);
         }
-        $this->setRequest($request);
 
-        if (!($response instanceof Response)) {
-            $response = new Response();
-        }
-        $this->response = $response;
+        $this->setRequest($request !== null ? $request : new Request);
+        $this->response = $response !== null ? $response : new Response;
 
-        if ($eventManager) {
+        if ($eventManager !== null) {
             $this->eventManager($eventManager);
         }
 
@@ -384,6 +370,18 @@ class Controller implements EventListenerInterface
         if (isset($request->params['pass'])) {
             $this->passedArgs = $request->params['pass'];
         }
+
+        if (!$this->viewPath) {
+            $viewPath = $this->name;
+            if (isset($request->params['prefix'])) {
+                $prefixes = array_map(
+                    'Cake\Utility\Inflector::camelize',
+                    explode('/', $request->params['prefix'])
+                );
+                $viewPath = implode(DS, $prefixes) . DS . $viewPath;
+            }
+            $this->viewPath = $viewPath;
+        }
     }
 
     /**

+ 1 - 1
src/Routing/Filter/ControllerFactoryFilter.php

@@ -84,6 +84,6 @@ class ControllerFactoryFilter extends DispatcherFilter
         if ($reflection->isAbstract() || $reflection->isInterface()) {
             return false;
         }
-        return $reflection->newInstance($request, $response);
+        return $reflection->newInstance($request, $response, $controller);
     }
 }

+ 5 - 5
tests/TestCase/Controller/ControllerTest.php

@@ -762,7 +762,7 @@ class ControllerTest extends TestCase
     public function testInvokeActionMissingAction()
     {
         $url = new Request('test/missing');
-        $url->addParams(['controller' => 'test_controller', 'action' => 'missing']);
+        $url->addParams(['controller' => 'Test', 'action' => 'missing']);
         $response = $this->getMock('Cake\Network\Response');
 
         $Controller = new TestController($url, $response);
@@ -779,7 +779,7 @@ class ControllerTest extends TestCase
     public function testInvokeActionPrivate()
     {
         $url = new Request('test/private_m/');
-        $url->addParams(['controller' => 'test_controller', 'action' => 'private_m']);
+        $url->addParams(['controller' => 'Test', 'action' => 'private_m']);
         $response = $this->getMock('Cake\Network\Response');
 
         $Controller = new TestController($url, $response);
@@ -796,7 +796,7 @@ class ControllerTest extends TestCase
     public function testInvokeActionProtected()
     {
         $url = new Request('test/protected_m/');
-        $url->addParams(['controller' => 'test_controller', 'action' => 'protected_m']);
+        $url->addParams(['controller' => 'Test', 'action' => 'protected_m']);
         $response = $this->getMock('Cake\Network\Response');
 
         $Controller = new TestController($url, $response);
@@ -813,7 +813,7 @@ class ControllerTest extends TestCase
     public function testInvokeActionBaseMethods()
     {
         $url = new Request('test/redirect/');
-        $url->addParams(['controller' => 'test_controller', 'action' => 'redirect']);
+        $url->addParams(['controller' => 'Test', 'action' => 'redirect']);
         $response = $this->getMock('Cake\Network\Response');
 
         $Controller = new TestController($url, $response);
@@ -829,7 +829,7 @@ class ControllerTest extends TestCase
     {
         $url = new Request('test/returner/');
         $url->addParams([
-            'controller' => 'test_controller',
+            'controller' => 'Test',
             'action' => 'returner',
             'pass' => []
         ]);