Example #1
0
File: CMvc.php Project: Rgss/imp
 /**
  * 启动控制器
  *
  */
 public function runController()
 {
     $cBuilder = Imp::app()->instance('mvcBuilder')->controllerBuilder();
     $cBuilder->init();
     $cFile = $cBuilder->file();
     $cName = $cBuilder->controller();
     $cAction = $cBuilder->action();
     $cParams = $cBuilder->params();
     $config = Imp::app()->instance('config')->get();
     if (!is_file($cFile)) {
         if ($config['debug']) {
             CError::show("Controller file \"<font color=\"red\">{$cFile}</font>\" not found");
         } else {
             View::show404();
         }
         return;
     }
     // 应用基类
     $myController = Imp::app()->basePath() . '/MyController/BaseController.php';
     if (is_file($myController)) {
         require $myController;
     }
     require $cFile;
     if (!class_exists($cName)) {
         if ($config['debug']) {
             Error::show(Error::getError(Error::$errorType['no_controller']) . ': ' . $cName);
         } else {
             View::show404();
         }
     }
     // 检查最终的控制器及其方法
     if (!method_exists($cName, $cAction)) {
         Imp::app()->instance('router')->unShiftParams($cAction);
         $cAction = Imp::app()->instance('config')->get('default_action');
         $cParams = Imp::app()->instance('router')->getParams();
         Imp::app()->instance('router')->setAction($cAction);
     }
     // action 钩子
     Imp::app()->instance('hook')->call('action');
     // 实例化操作模块
     $cInstance = new $cName();
     // 检查最终的控制器及其方法
     if (!method_exists($cInstance, $cAction)) {
         if ($config['debug']) {
             Error::show(Error::getError(Error::$errorType['no_action']) . ': ' . $cAction);
         } else {
             View::show404();
         }
         return;
     }
     // 调用当前控制器方法
     call_user_func_array(array($cInstance, $cAction), $cParams);
 }