コード例 #1
0
ファイル: Dispatcher.php プロジェクト: jtclark/phly
 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;
 }