public function dispatch(Route $route, Request $request, Response $response)
 {
     $controller = __NAMESPACE__ . '\\Controllers\\' . $route->getController();
     $action = $route->getAction();
     $foo = new $controller($request, $response);
     $foo->{$action}();
     $response->send();
 }
 public function preview_page()
 {
     $page = Page::getByID(intval($_REQUEST['cID'], 10), 'RECENT');
     if (!is_object($page) || $page->isError()) {
         throw new \InvalidArgumentException('Invalid collection ID');
     }
     $permissions = new Permissions($page);
     if ($permissions->canPreviewPageAsUser() && $permissions->canRead() && Config::get('concrete.permissions.model') == 'advanced') {
         /** @var Request $request */
         $request = Request::getInstance();
         $request->setCustomRequestUser(false);
         $request->setCurrentPage($page);
         if ($request->request('customUser')) {
             $user_info = UserInfo::getByUserName($request->request('customUser'));
             if ($user_info && is_object($user_info) && !$user_info->isError()) {
                 $request->setCustomRequestUser($user_info);
             }
         }
         $request->setCustomRequestDateTime(Core::make('helper/form/date_time')->translate('preview_as_user_datetime', $request->request()));
         $controller = $page->getPageController();
         $view = $controller->getViewObject();
         $response = new \Response();
         $response->setContent($view->render());
         $response->send();
     }
 }
Example #3
0
 /**
  * Displays a particular model.
  * @param integer $id the ID of the model to be displayed
  */
 public function actionIndex()
 {
     //echo CJSON::encode("ok");
     //Yii::app()->end();
     if (isset($_POST['Company'])) {
         $id = (int) $_POST['Company'];
         //
         //if has access
         //$database= Company::model()->findByPk($id);
         Yii::log($id, 'info', 'app');
         //Yii::app()->user->setState('Database',$database );
         //Yii::app()->user->setState('Company',$id);
         //echo 'ok';
         Company::model()->select($id);
         //redirect
         Response::send();
     }
     if (Yii::app()->user->Company != 0) {
         Yii::app()->user->setState('Company', 0);
         $this->redirect('company');
         Yii::app()->end();
     }
     $model = new Company('search');
     $model->unsetAttributes();
     // clear any default values
     $this->render('index', array('model' => $model));
 }
Example #4
0
 public function run()
 {
     $route = $this->router->match($this->request);
     if ($route === false) {
         $actionName = self::ACTION_NOT_FOUND;
     } else {
         $actionName = $route->getName();
     }
     if (!$this->actions->has($actionName)) {
         throw new \Exception(sprintf('Action %s not found', $actionName));
     }
     $this->store->setFileName($actionName);
     if ($this->request->isAjax()) {
         $this->view->setRenderType(View::RENDER_JSON);
     } else {
         $this->view->setContentView('error');
     }
     $action = $this->actions->get($actionName);
     call_user_func_array($action, array($this));
     if (is_callable($this->postAction)) {
         call_user_func_array($this->postAction, array($this));
     }
     $this->response->setContent($this->view->render());
     $this->response->send();
 }
Example #5
0
 public static function to($url)
 {
     Response::clean();
     Response::header('Location', $url);
     Response::send();
     exit;
 }
Example #6
0
 public function preview()
 {
     $request = \Request::getInstance();
     $c = \Page::getByID($this->request->get('cID'));
     $cp = new \Permissions($c);
     if ($cp->canViewPageVersions()) {
         $c->loadVersionObject(\Core::make('helper/security')->sanitizeInt($_REQUEST['cvID']));
         $spoofed_request = \Request::createFromGlobals();
         if ($device_handle = $request->headers->get('x-device-handle')) {
             if ($device = \Core::make('device/manager')->get($device_handle)) {
                 if ($agent = $device->getUserAgent()) {
                     $spoofed_request->headers->set('User-Agent', $agent);
                 }
             }
         }
         $spoofed_request->setCustomRequestUser(-1);
         $spoofed_request->setCurrentPage($c);
         \Request::setInstance($spoofed_request);
         $controller = $c->getPageController();
         $controller->runTask('view', array());
         $view = $controller->getViewObject();
         $response = new \Response();
         $content = $view->render();
         // Reset just in case.
         \Request::setInstance($request);
         $response->setContent($content);
         $response->send();
         exit;
     }
 }
Example #7
0
 /**
  * When this type of exception isn't caught this method is called by
  * Error::exception_handler() to deal with the problem.
  */
 public function handle()
 {
     $response = new \Response(\View::forge('404'), 404);
     \Event::shutdown();
     $response->send(true);
     return;
 }
 /**
  * @mcms_message ru.molinos.cms.page.content
  */
 public static function hookRequest(Context $ctx)
 {
     if (true === self::isLocked($ctx)) {
         $r = new Response(t('На сервере ведутся технические работы, обратитесь чуть позже.'), 'text/plain', 503);
         $r->send();
     }
 }
Example #9
0
 public static function error($message, $status = 501)
 {
     Event::trigger('api.error', [$message, $status]);
     Response::status($status);
     Response::json(['error' => ['type' => 'fatal', 'status' => $status, 'message' => $message]]);
     Response::send();
     exit;
 }
Example #10
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 注册错误和异常处理机制 以及初始化配置
     register_shutdown_function('\\think\\Error::appShutdown');
     set_error_handler('\\think\\Error::appError');
     set_exception_handler('\\think\\Error::appException');
     Config::load(THINK_PATH . 'config' . EXT);
     // 初始化应用(公共模块) 初始化变量配置
     self::initModule(COMMON_MODULE, Config::get());
     // 获取配置参数
     $config = Config::get();
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 记录路由信息
     APP_DEBUG && Log::record('[ ROUTE ] ' . var_export(self::$dispatch, true), 'info');
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['module'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             //$data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']);
             break;
         case 'function':
             // 规则闭包
             $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }
Example #11
0
 function show()
 {
     $configuration = new Config();
     $database = new SafeMySQL(array('user' => $configuration->db->username, 'pass' => $configuration->db->password, 'db' => $configuration->db->database, 'charset' => $configuration->db->charset));
     $data = $database->getAll('SELECT * FROM students');
     $response = new Response();
     $response->setContent(json_encode($data));
     $response->send();
 }
Example #12
0
 function about(Request $request, Response $response)
 {
     $this->v->set_tplname('mod_default_about');
     $this->nav_flag1 = 'about';
     if ($request->is_hashreq()) {
     } else {
     }
     $response->send($this->v);
 }
Example #13
0
 public static function viaJavaScript($url, $parent = false)
 {
     if ($link = Filter::with('core.redirect', $url)) {
         Response::type('text/html');
         Response::add('<script>' . ($parent ? 'parent.' : '') . 'location.href="', addslashes($link), '"</script>');
         Response::send();
         exit;
     }
 }
Example #14
0
 protected function returnSuccess($data, $message = null)
 {
     $res = new Response();
     $res->success = true;
     $res->data = $data;
     $res->message = $message;
     $res->send();
     exit;
 }
Example #15
0
 public function send()
 {
     $location = $this->location;
     if (!preg_match('#^https?://#', $location)) {
         $location = $this->getSchema() . '://' . $_SERVER['HTTP_HOST'] . $location;
     }
     $this->addHeader('Location: ' . $location);
     parent::send();
 }
Example #16
0
 public function testResponse()
 {
     $response = new Response();
     $response->setContent('some output');
     ob_start();
     $response->send();
     $output = ob_get_contents();
     ob_end_clean();
     $this->assertEquals('some output', $output);
 }
Example #17
0
function session_required()
{
    // if the session has expired set the cookie again
    Database::refresh_session_if_staying_logged_in();
    // cancels script execution when the session cookie is not set
    // returns an "no session" error
    if (!isset($_SESSION['id'])) {
        Response::send("no session", "error");
    }
}
Example #18
0
 /**
  * show error page
  *
  * call error action method and set response status code
  * This will work as well for ajax call, see how ajax calls are handled in main.js
  *
  * @param string $error
  *
  */
 public function error($error)
 {
     $errorController = new ErrorsController();
     if (!method_exists("ErrorsController", $error)) {
         $error = "System";
     }
     $errors = ["notfound" => 404, "system" => 500, "badrequest" => 400, "unauthorized" => 401, "forbidden" => 403];
     $code = isset($errors[strtolower($error)]) ? $errors[strtolower($error)] : 500;
     $this->response->setStatusCode($code);
     //clear, get page, then send headers
     $this->response->clearBuffer();
     $errorController->{$error}();
     $this->response->send();
 }
Example #19
0
 /**
  *
  * Report the error
  *
  * @param [string] The message to be displayed
  * @param [boolean] Whether or not to display PHP backtrace
  */
 function report($msg, $backtrace = true)
 {
     // Check for error reporting flag
     if ($this->config['error_reporting']) {
         Template::load('error_reporting.html', array("msg" => $msg, "backtrace" => print_r(debug_backtrace(), true)));
         exit;
     } else {
         // Prepare 404 response
         $Response = new Response();
         $Response->setCode(404);
         $Response->send();
         Template::load('404.html');
     }
     exit;
 }
Example #20
0
 public function actionCalc()
 {
     $model = new Docdetails();
     if (isset($_POST['Docdetails']['line'])) {
         $i = $_POST['Docdetails']['line'];
         $model->attributes = $_POST['Docdetails'][$i];
         if (isset($_POST['CalcPriceWithVat'])) {
             Response::send(200, $model->CalcPriceWithVat());
         }
         if (isset($_POST['CalcPriceWithOutVat'])) {
             Response::send(200, $model->CalcPriceWithOutVat());
         }
         Response::send(200, $model->CalcPrice());
     }
 }
Example #21
0
 /**
  * instantiate controller object and trigger it's action method
  *
  * @param  string $controller
  * @param  string $method
  * @param  array  $args
  * @return Response 
  */
 private function invoke($controller, $method = "index", $args = [])
 {
     $this->request->addParams(['controller' => $controller, 'action' => $method, 'args' => $args]);
     $this->controller = new $controller($this->request, $this->response);
     $result = $this->controller->startupProcess();
     if ($result instanceof Response) {
         return $result->send();
     }
     if (!empty($args)) {
         $response = call_user_func_array([$this->controller, $method], $args);
     } else {
         $response = $this->controller->{$method}();
     }
     if ($response instanceof Response) {
         return $response->send();
     }
     return $this->response->send();
 }
Example #22
0
 /**
  * Renders the exception.
  * @param \Exception $exception the exception to be rendered.
  */
 protected function renderException($exception)
 {
     if (Yii::$app->has('response')) {
         $response = Yii::$app->getResponse();
         // reset parameters of response to avoid interference with partially created response data
         // in case the error occurred while sending the response.
         $response->isSent = false;
         $response->stream = null;
         $response->data = null;
         $response->content = null;
     } else {
         $response = new Response();
     }
     //$useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException);
     $response->format === Response::FORMAT_JSON;
     $response->data = $this->convertExceptionToArray($exception);
     $response->send();
 }
Example #23
0
 public static function handleException(Exception $exception)
 {
     // Log exception
     $logger = Application::instance()->logger();
     if ($logger !== null) {
         $msg = sprintf("%s: %s", get_class($exception), $exception->getMessage());
         try {
             $logger->error($msg);
         } catch (Exception $e) {
             // Ignore exception, it will be handled next time
         }
     }
     // Mail exception
     $errorsMailer = new ErrorsMailer();
     try {
         $errorsMailer->deliverErrorMail($exception);
     } catch (Exception $e) {
         // Ignore exception, it will be handled next time
     }
     // Render exception for development and show 500 page in production
     try {
         if (is_development()) {
             $format = is_cli() ? 'txt' : 'html';
             $view_template = sprintf('errors/exception.%s.php', $format);
             $request = new Request();
             $view = new View(APP_VIEWS_DIR, $view_template, array('exception' => $exception, 'request' => $request));
             $response = new Response();
             $response->statusCode = 500;
             $response->body = $view->render();
             $response->send();
         } else {
             if (!is_cli()) {
                 $view = new View(PUBLIC_DIR, '500.html');
                 $response = new Response();
                 $response->statusCode = 500;
                 $response->body = $view->render();
                 $response->send();
             }
         }
     } catch (Exception $e) {
         echo $e->getMessage();
     }
     exit;
 }
Example #24
0
 /**
  * action 'login'
  * @param Request $request
  * @param Response $response
  */
 public function login(Request $request, Response $response)
 {
     $show_page = true;
     $retmsg = '';
     $retuname = '';
     $retupass = '';
     if (isset($_POST['loginname']) && isset($_POST['password'])) {
         $loginname = trim($_POST['loginname']);
         $password = trim($_POST['password']);
         $verifycode = isset($_POST['verifycode']) ? trim($_POST['verifycode']) : '';
         unset($_POST['loginname'], $_POST['password'], $_POST['verifycode']);
         $retuname = $loginname;
         $retupass = $password;
         if ('' == $loginname) {
             $retmsg = '请输入用户名';
         } elseif ('' == $password) {
             $retmsg = '请输入密码';
         } elseif ('' == $verifycode) {
             $retmsg = '请输入验证码';
         } elseif (0 && $verifycode != $_SESSION['verifycode']) {
             $retmsg = '请输入正确的验证码';
         } else {
             $check = User_Model::check_logined($loginname, $password, $admin);
             if ($check < 0) {
                 $retmsg = '不存在该用户';
             } elseif ($check === 0) {
                 $retmsg = '密码错误!';
             } else {
                 //Final Login Success
                 $retmsg = '登录成功!';
                 unset($_SESSION['verifycode']);
                 $_SESSION['logined_uid'] = $admin['admin_uid'];
                 $_SESSION['logined_uname'] = $admin['admin_uname'];
                 $response->redirect('/home');
             }
         }
     }
     if ($show_page) {
         $v = new PageView('mod_user_login', '_page_front');
         $v->assign('retmsg', $retmsg)->assign('retuname', $retuname)->assign('retupass', $retupass);
         $response->send($v);
     }
 }
 /**
  * Вывод содержимого объекта.
  */
 public static function on_get_dump(Context $ctx)
 {
     $filter = array('id' => $ctx->get('node'));
     if (!$ctx->canDebug()) {
         $filter['deleted'] = 0;
     }
     if ($ctx->get('raw')) {
         $node = Node::load($filter, $ctx->db);
         $temp = $node->{'never should this field exist'};
         mcms::debug($node);
     } else {
         $xml = Node::findXML($filter, $ctx->db);
         if (empty($xml)) {
             throw new RuntimeException(t('Для этого документа нет XML представления (такого быть не должно), см. <a href="@url">сырой вариант</a>.', array('@url' => '?q=node/' . $filter['id'] . '/dump&raw=1')));
         }
         $res = new Response('<?xml version="1.0"?>' . $xml, 'text/xml');
         $res->send();
     }
     throw new ForbiddenException();
 }
 public function __construct()
 {
     // check that site was enabled.
     if (!\Model_Sites::isSiteEnabled()) {
         $request = \Request::forge('error/403')->execute();
         $response = new \Response($request, 403);
         $response->set_status(403);
         $response->send(true);
         unset($request, $response);
         exit;
     }
     // fix changed current language but autoload not reload
     \Lang::load('fslang');
     // call web cron to run tasks (including purge old login history)
     \Library\WebCron::forge()->init();
     // set default theme name
     // @todo [fuelstart][theme] for theme management. you should get default theme setting from db here.
     \Config::load('theme', true);
     $theme_active = \Config::get('theme.active');
     $this->theme_system_name = $theme_active;
     unset($theme_active);
 }
Example #27
0
    $result = array();
    $files = diverse_array($files);
    foreach ($files as $file) {
        $f = new UploadedFile();
        $f->name = $file['name'];
        $f->mime = $file['type'];
        $f->size = $file['size'];
        $f->tempfile = $file['tmp_name'];
        $f->error = $file['error'];
        // 'expire' doesn't exist neither in $_FILES nor in UploadedFile;
        // commented out for future implementation
        //$f->expire   = $file['expire'];
        $result[] = $f;
    }
    return $result;
}
$type = isset($_GET['output']) ? $_GET['output'] : 'json';
$response = new Response($type);
if (isset($_FILES['files'])) {
    $uploads = refiles($_FILES['files']);
    try {
        foreach ($uploads as $upload) {
            $res[] = upload_file($upload);
        }
        $response->send($res);
    } catch (Exception $e) {
        $response->error($e->getCode(), $e->getMessage());
    }
} else {
    $response->error(400, 'No input file(s)');
}
Example #28
0
File: app.php Project: xl602/think
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化公共模块
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $file) {
             Config::load($file, $file);
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 日志初始化
     Log::init($config['log']);
     // 缓存初始化
     Cache::connect($config['cache']);
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     // 应用URL调度
     self::dispatch($config);
     // 监听app_run
     APP_HOOK && Hook::listen('app_run');
     // 执行操作
     if (!preg_match('/^[A-Za-z](\\/|\\.|\\w)*$/', CONTROLLER_NAME)) {
         // 安全检测
         throw new Exception('illegal controller name:' . CONTROLLER_NAME, 10000);
     }
     if (Config::get('action_bind_class')) {
         $class = self::bindActionClass(Config::get('empty_controller'));
         $instance = new $class();
         // 操作绑定到类后 固定执行run入口
         $action = 'run';
     } else {
         $instance = Loader::controller(CONTROLLER_NAME, '', Config::get('empty_controller'));
         // 获取当前操作名
         $action = ACTION_NAME . Config::get('action_suffix');
     }
     if (!$instance) {
         throw new Exception('class [ ' . Loader::parseClass(MODULE_NAME, CONTROLLER_LAYER, CONTROLLER_NAME) . ' ] not exists', 10001);
     }
     try {
         // 操作方法开始监听
         $call = [$instance, $action];
         APP_HOOK && Hook::listen('action_begin', $call);
         if (!preg_match('/^[A-Za-z](\\w)*$/', $action)) {
             // 非法操作
             throw new \ReflectionException();
         }
         //执行当前操作
         $method = new \ReflectionMethod($instance, $action);
         if ($method->isPublic()) {
             // URL参数绑定检测
             if (Config::get('url_params_bind') && $method->getNumberOfParameters() > 0) {
                 // 获取绑定参数
                 $args = self::getBindParams($method, Config::get('url_parmas_bind_type'));
                 // 全局过滤
                 array_walk_recursive($args, 'think\\Input::filterExp');
                 $data = $method->invokeArgs($instance, $args);
             } else {
                 $data = $method->invoke($instance);
             }
             // 操作方法执行完成监听
             APP_HOOK && Hook::listen('action_end', $data);
             // 输出数据
             return Response::send($data, Response::type(), Config::get('response_return'));
         } else {
             // 操作方法不是Public 抛出异常
             throw new \ReflectionException();
         }
     } catch (\ReflectionException $e) {
         // 操作不存在
         if (method_exists($instance, '_empty')) {
             $method = new \ReflectionMethod($instance, '_empty');
             $data = $method->invokeArgs($instance, [$action, '']);
             // 操作方法执行完成监听
             APP_HOOK && Hook::listen('action_end', $data);
             // 输出数据
             return Response::send($data, Response::type(), Config::get('response_return'));
         } else {
             throw new Exception('method [ ' . (new \ReflectionClass($instance))->getName() . '->' . $action . ' ] not exists ', 10002);
         }
     }
 }
Example #29
0
    if (Config::$items['error']['log']) {
        call_user_func(Config::$items['error']['logger'], $exception);
    }
};
/**
 * Create the exception handler function. All of the error handlers
 * registered by the framework call this closure to avoid duplicate
 * code. This Closure will pass the exception to the developer
 * defined handler in the configuration file.
 */
$handler = function ($exception) use($logger) {
    $logger($exception);
    if (Config::$items['error']['detail']) {
        echo "== Unhandled Exception ==\n" . $exception->getMessage() . "\n" . $exception->getFile() . " on line " . $exception->getLine() . "\n\n" . $exception->getTraceAsString() . "\n\n";
        $response = new Response('', '500');
        $response->send();
    } else {
        $response = Response::json(['msg' => $exception->getMessage(), 'file' => $exception->getFile() . ':' . $exception->getLine(), 'trace' => $exception->getTraceAsString()], 500);
        $response->send();
    }
    exit(1);
};
/**
 * Register the PHP exception handler. The framework throws exceptions
 * on every error that cannot be handled. All of those exceptions will
 * be sent through this closure for processing.
 */
set_exception_handler(function ($exception) use($handler) {
    $handler($exception);
});
/**
Example #30
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $name => $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             Config::load($file, is_string($name) ? $name : pathinfo($file, PATHINFO_FILENAME));
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
         if (!APP_MULTI_MODULE) {
             Lang::load(APP_PATH . 'lang' . DS . LANG_SET . EXT);
         }
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['module'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']);
             break;
         case 'function':
             // 规则闭包
             $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }