public function dispatch(Request $request) { $this->routeMap = $this->initRouteMap(); list($module, $controller, $action, $paramName) = $this->findRoute($request->getUri(), $request->getMethod()); $data = $request->getData(); $controllerFullName = sprintf('src\\%s\\controller\\%s', $module, $controller); $controller = new $controllerFullName(); $action = $action . self::ACTION_POSTFIX; if (!method_exists($controller, $action)) { throw new Exception(sprintf('Method %s does not exist in %s', $action, get_class($controller))); } return $controller->{$action}($request, $paramName, $data); }