/** * testBeforeDispatch * * @return void */ public function testBeforeDispatch() { Configure::write('App.namespace', 'TestApp'); $filter = new ControllerFactoryFilter(); $request = new Request(); $response = new Response(); $request->addParams(['prefix' => 'admin', 'controller' => 'Posts', 'action' => 'index']); $event = new Event(__CLASS__, $this, compact('request', 'response')); $filter->beforeDispatch($event); $this->assertEquals('TestApp\\Controller\\Admin\\PostsController', get_class($event->data['controller'])); $request->addParams(['prefix' => 'admin/sub', 'controller' => 'Posts', 'action' => 'index']); $event = new Event(__CLASS__, $this, compact('request', 'response')); $filter->beforeDispatch($event); $this->assertEquals('TestApp\\Controller\\Admin\\Sub\\PostsController', get_class($event->data['controller'])); }
/** * Get controller to use, either plugin controller or application controller * * @param \Cake\Network\Request $request Request object * @param \Cake\Network\Response $response Response for the controller. * @return mixed name of controller if not loaded, or object if loaded */ protected function _getController($request, $response) { $pluginPath = $controller = null; $namespace = 'Controller'; if (!empty($request->params['plugin'])) { $pluginPath = $request->params['plugin'] . '.'; } if ($pluginPath) { return parent::_getController($request, $response); } if (!empty($request->params['controller'])) { $controller = $request->params['controller']; } if (!empty($request->params['prefix'])) { $namespace .= '/' . Inflector::camelize($request->params['prefix']); } $className = false; if ($pluginPath . $controller) { $className = App::classname($pluginPath . $controller, $namespace, 'Controller'); } if (!$className) { return false; } $instance = PipingBag::get($className); if (method_exists($instance, 'viewBuilder')) { $instance->viewBuilder(); } else { $instance->viewPath = null; } $instance->name = $controller; $instance->setRequest($request); $instance->response = $response; return $instance; }