public function dispatch(EventInterface $e) { $request = $e->getRequest(); $module = $request->getModuleName(); $controller = $request->getControllerName(); if (empty($module) || $module == 'default') { $module = 'application'; } if (empty($controller)) { $controller = 'index'; } $dirs = $this->getControllerDirectories(); if (!in_array($module, array_keys($dirs))) { $e->setState('error'); $e->addException(new InvalidModuleException()); return; } $dir = $dirs[$module]; $controllerSegment = $this->_normalizeClassName($controller) . 'Controller'; $classFile = $dir . '/' . str_replace('_', '/', $controllerSegment) . '.php'; $className = lcfirst($this->_normalizeClassName($module)) . '\\' . $controllerSegment; if (!file_exists($classFile)) { $e->setState('error'); $e->addException(new ControllerNotFoundException()); return; } include_once $classFile; if (!class_exists($className)) { $e->setState('error'); $e->addException(new ControllerNotFoundException()); return; } $controller = new $className(); if (!is_callable($controller)) { $e->setState('error'); $e->addException(new InvalidControllerException()); return; } try { $controller($e); } catch (\Exception $except) { $e->setState('error'); $e->addException($except); } return $e; }