Ejemplo n.º 1
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'));
 }
Ejemplo n.º 2
0
 /**
  * Dispatch
  */
 protected function dispatch()
 {
     $data = [];
     switch (self::$dispatch['type']) {
         case 'redirect':
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             $data = self::module(self::$dispatch['module']);
             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 KantException('dispatch type not support', 5002);
     }
     $this->output($data);
 }
Ejemplo n.º 3
0
Archivo: App.php Proyecto: cnzin/think
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 获取配置参数
     $config = Config::get();
     // 注册根命名空间
     if (!empty($config['root_namespace'])) {
         Loader::addNamespace($config['root_namespace']);
     }
     // 加载额外文件
     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);
         }
     }
     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);
     // 输出数据到客户端
     if (Config::get('response_auto_output')) {
         // 自动响应输出
         return Response::send($data, Response::type(), Config::get('response_return'));
     }
 }
Ejemplo n.º 4
0
<?php

define('NET_CLIENT_PATH', __DIR__);
require __DIR__ . '/libs/local.php';
include_once NET_CLIENT_PATH . '/libs/loader.php';
if (!empty($argv) && !empty($argv[1])) {
    $action = $argv[1];
} else {
    // TODO: Убрать
    $action = filter_input(INPUT_GET, 'a');
}
if (!$action) {
    return false;
}
// TODO: Переделать в демона.
$local = new Local();
$conn_data = $local->get_connection_data();
$loader = new Loader($local);
$loader->load_api($conn_data['key'], $conn_data['domain']);
$return = $loader->action($action);
if (!empty($return['log'])) {
    echo 'Action: ' . $action . '(' . date('y-m-d H:i') . ')' . "\n";
    echo json_encode($return['log']) . "\n";
}
Ejemplo n.º 5
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 $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路由检测
     $dispatch = self::route($config);
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin', $dispatch);
     // 根据类型调度
     switch ($dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . $dispatch['url'], true, $dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module($dispatch['data'], $config);
             break;
         case 'action':
             // 执行操作
             $data = Loader::action($dispatch['action'], $dispatch['params']);
             break;
         case 'behavior':
             // 执行行为
             $data = Hook::exec($dispatch['class'], $dispatch['method'], $dispatch['params']);
             break;
         case 'regex_closure':
             // 正则闭包
             $data = self::invokeRegex($dispatch['closure'], $dispatch['params']);
             break;
         case 'rule_closure':
             // 规则闭包
             $data = self::invokeRule($dispatch['closure'], $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'));
 }
Ejemplo n.º 6
0
 /**
  * Load components and register hooks with WordPress.
  *
  * @since       1.0.0
  * @access      protected
  * @return      void
  */
 protected function run()
 {
     $this->loader->action('plugins_loaded', array($this, 'loadTextDomain'));
 }
Ejemplo n.º 7
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 $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']);
     }
     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['data'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'callable':
             // 执行回调方法
             $callable = self::$dispatch['callable'];
             if (is_callable($callable)) {
                 $data = is_array($callable) ? self::reflectionInvoke(new $callable[0](), $callable[1]) : call_user_func_array($callable, self::$dispatch['params']);
                 // 静态方法或者函数
             } else {
                 throw new Exception('not callable : ' . (is_array($callable) ? implode('->', $callable) : $callable), 10009);
             }
             break;
         case 'closure':
             // 规则闭包
             $data = self::invoke(self::$dispatch['closure'], 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'));
 }
Ejemplo n.º 8
0
 /**
  * 执行应用
  * @static
  * @access public
  */
 public static function listen(Request $request = null, $type = 'web')
 {
     is_null($request) && ($request = Request::instance());
     //请求筛选
     \Norma\Hook::trigger('request_action', [$request]);
     //加载应用独立文件
     if (\Norma\Config::has('extra_config_list')) {
         $extra_config_list = \Norma\Config::get('extra_config_list');
         if (is_string($extra_config_list)) {
             $extra_config_list = explode(',', $extra_config_list);
         }
         foreach ($extra_config_list as $key => $file) {
             \Norma\Config::load(APP_PATH . '/Config/' . $file . '.php');
         }
     }
     // 设置系统时区
     date_default_timezone_set(\Norma\Config::get('default_timezone'));
     // 应用调试模式
     self::$debug = Config::get('app_debug');
     if (!self::$debug) {
         ini_set('display_errors', 'Off');
     } else {
         //重新申请一块比较大的buffer
         if (ob_get_level() > 0) {
             $output = ob_get_clean();
         }
         ob_start();
         if (!empty($output)) {
             echo $output;
         }
     }
     // 注册应用实现类名称空间
     \Norma\App::$loader->addNamespace(\Norma\Config::get('app_namespace') ?: "App", APP_PATH);
     // 加载插件
     \Norma\Hook::loadPlugin(APP_PATH . '/Plugin', \Norma\Config::get('app_namespace'));
     // 开启多语言机制
     if (\Norma\Config::get('lang_switch_on')) {
         // 获取当前语言
         $request->langset(Lang::detect());
         // 加载系统语言包
         Lang::load(FRAME_PATH . '/Ability/Lang' . DIRECTORY_SEPARATOR . $request->langset() . '.php');
         if (!\Norma\Config::get('app_multi_module')) {
             Lang::load(APP_PATH . '/Lang' . DIRECTORY_SEPARATOR . $request->langset() . '.php');
         }
     }
     // 获取应用调度信息
     $dispatch = self::$dispatch;
     if (empty($dispatch)) {
         // 进行URL路由检测
         $dispatch = self::routeCheck($request, \Norma\Config::get());
     }
     // 记录当前调度信息
     $request->dispatch($dispatch);
     // 记录路由信息
     //self::$debug && Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
     // 监听app_begin
     //Hook::listen('app_begin', $dispatch);
     switch ($dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             $data = Response::create($dispatch['url'], 'redirect')->code($dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module($dispatch['module'], \Norma\Config::get(), isset($dispatch['convert']) ? $dispatch['convert'] : null);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action($dispatch['controller'], $dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod($dispatch['method'], $dispatch['params']);
             break;
         case 'function':
             // 执行闭包
             $data = self::invokeFunction($dispatch['function'], $dispatch['params']);
             break;
         case 'response':
             $data = $dispatch['response'];
             break;
         default:
             throw new \InvalidArgumentException('dispatch type not support');
     }
     // 输出数据到客户端
     if ($data instanceof Response) {
         $response = $data;
     } elseif (!is_null($data)) {
         // 默认自动识别响应输出类型
         $isAjax = $request->isAjax();
         $type = $isAjax ? Config::get('default_ajax_return') : Config::get('default_return_type');
         \Norma\Hook::trigger('output', [$data, $type]);
     } else {
         \Norma\Hook::trigger('output');
     }
     //
     //return $response;
 }